NSIS-FindProc всегда возвращает 1 - PullRequest
       25

NSIS-FindProc всегда возвращает 1

0 голосов
/ 12 декабря 2011

Я использую макрос, определенный здесь , в Windows 7, однако он всегда возвращает 1.

Вот как я его называю:

!insertmacro FindProc $processFound "MyApp.exe"
MessageBox MB_OK $processFound
IntCmp $processFound ${FindProc_FOUND} +1 +3 +3
MessageBox MB_ICONEXCLAMATION|MB_OK "Please close the app before running this setup." /SD IDOK
Abort

Это кажется довольно простым по сравнению с возня с WMI, и метод FindProcDLL, перечисленный на той же странице, больше не работает (даже версия NSIS Unicode).Так почему этот метод всегда возвращает 1?Я отдельно проверил, что

tasklist /nh /fi "IMAGENAME eq MyApp.exe"  | find /i "MyApp.exe"

возвращает 1 и 0 в зависимости от того, запущено приложение или нет.

Обновление : я использовал ExecWait стот же результат.

Обновление 2 : пробовал с помощью nsProcess от здесь , как показано ниже -

nsProcess::_FindProcess "myprogram.exe" $R0
MessageBox MB_OK $R0

Это всегда отображается как пустое.Я нигде не объявил $ R0.Есть ли где-то синтаксическая ошибка или она также не работает в Windows 7?

Ответы [ 2 ]

0 голосов
/ 15 декабря 2011

Шляпа подсказка Андерсу - я забыл выскочить результат вызова функции. Код теперь работает и выглядит так:

nsProcess::_FindProcess "UID.EnrolmentClient.exe" $R0
Pop $0
StrCmp $0 "0" +1 +3
MessageBox MB_ICONEXCLAMATION|MB_OK "Please close the application before running this setup." /SD IDOK
Abort
0 голосов
/ 13 декабря 2011

Вы можете попробовать что-то вроде этого.

FindProcDLL::FindProc "MyApp.exe"
${if} $R0 == 1
MessageBox MB_ICONEXCLAMATION|MB_OK "Killing process now." /SD IDOK
KillProcDLL::KillProc "MyApp.exe"
${EndIf}
...