Мне нужно убить работающее консольное приложение, которое работает в фоновом режиме, с помощью tskill.exe, однако, когда я игнорирую $ (env.windir) \ system32, я получаю сообщение об ошибке ниже.
Значение атрибута CustomAction / @ Directory, C: \ WINDOWS, не является допустимым идентификатором. Идентификаторы могут содержать символы ASCII A-Z, a-z, цифры, подчеркивания (_) или точки (.). Каждый идентификатор должен начинаться либо с буквы, либо с подчеркивания.
И CustomAction, который я написал для запуска tskill.exe:
<CustomAction Id="TaskKill" Impersonate="yes" Return="ignore" Directory="$(env.windir)" ExeCommand='"\system32\tskill.exe" /F /IM MyConsoleApp' TerminalServerAware="yes" Execute="deferred"/>
Как правильно достичь этого?
EDIT:
Я понял, что использовал это неправильно. Вот что у меня сейчас:
<Property Id="TASKKILLFILEPATH"/>
<Property Id="QtExecCmdLine" Value='"[TASKKILLFILEPATH]" /F /IM MyConsoleApp.exe'/>
<CustomAction Id='SetTASKKILLFILEPATH32' Property='TASKKILLFILEPATH' Value='[SystemFolder]taskkill.exe' Return='check' />
<CustomAction Id='SetTASKKILLFILEPATH64' Property='TASKKILLFILEPATH' Value='[System64Folder]taskkill.exe' Return='check' />
<InstallExecuteSequence>
<RemoveExistingProducts Before="InstallInitialize" />
<Custom Action='SetTASKKILLFILEPATH64' Before='AppSearch'>VersionNT64</Custom>
<Custom Action='SetTASKKILLFILEPATH32' Before='AppSearch'>Not VersionNT64</Custom>
</InstallExecuteSequence>
Все еще не работает.
Я хочу завершить процесс (MyConsoleApp.exe) перед началом установки или удаления.
Что не так с кодом?