Wix Toolkit. Как использовать $ (env.windir)? - PullRequest
0 голосов
/ 27 июня 2018

Мне нужно убить работающее консольное приложение, которое работает в фоновом режиме, с помощью 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) перед началом установки или удаления.

Что не так с кодом?

1 Ответ

0 голосов
/ 27 июня 2018

Вот как я это сделал.

<Property Id="cmdline">taskkill.exe /F /IM VClassConsole.exe</Property>

<CustomAction Id="SystemShell" Execute="deferred" Directory="TARGETDIR" ExeCommand='[cmdline]' Return="ignore" Impersonate="no"/>

<InstallExecuteSequence>
  <Custom Action="SystemShell" After="InstallInitialize"/>
</InstallExecuteSequence>
...