Проблема полагается с двумя аргументами, что Вы добавили к перегруженному новому оператору. Попытайтесь делать имя файла и строку глобальными в некотором роде (или членские переменные, если Вы перегружаете новый и удаляете для единого класса). Это должно работать лучше.
Другая возможность, которую я придумал, вдохновленная использованием grep , это:
tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL | find /I /N "myapp.exe">NUL
if "%ERRORLEVEL%"=="0" echo Program is running
Не нужно сохранять дополнительный файл, поэтому я предпочитаю этот метод.
Я использовал сценарий , предоставленный Мэттом ( 2008-10-02). Единственная проблема, с которой я столкнулся, заключалась в том, что он не удалял файл search.log
. Я ожидаю, потому что мне пришлось cd
в другое место, чтобы запустить мою программу. Я cd
вернулся туда, где находятся BAT-файл и search.log
, но он все равно не удалился. Я решил эту проблему, удалив файл search.log
первым, а не последним.
del search.log
tasklist /FI "IMAGENAME eq myprog.exe" /FO CSV > search.log
FOR /F %%A IN (search.log) DO IF %%-zA EQU 0 GOTO end
cd "C:\Program Files\MyLoc\bin"
myprog.exe myuser mypwd
:end