Wix - Как мне указать каталог для запуска командного файла? - PullRequest
1 голос
/ 21 апреля 2010

Я хочу запустить командный файл, который я делаю с помощью следующего:

<CustomAction Id='InstallFilter' FileKey='install' ExeCommand='' Execute='deferred'  />

<InstallExecuteSequence>
    <Custom Action='InstallFilter' Before='InstallFinalize' />
</InstallExecuteSequence>

Это выполнит командный файл, но он запускается в C: \ Windows \ System32 (или что-то в этом роде). Я хочу, чтобы он работал в каталоге, в котором находится файл. Он не позволит мне указать атрибут Directory с атрибутом FileKey. Как я могу сказать установщику, что он работает из определенного каталога, предпочтительно по идентификатору каталога.

Кроме того, когда я пытаюсь удалить свое приложение с помощью скрипта, я получаю сообщение об ошибке: «Существует проблема с пакетом установщика Windows. Не удалось запустить программу, необходимую для завершения установки». Это имеет смысл, поскольку к моменту запуска скрипта файлы уже были удалены. Вопрос:

  1. Как указать, что мое действие должно выполняться только при установке, а не при удалении?

  2. Как удалить эту текущую копию?

1 Ответ

1 голос
/ 21 апреля 2010

Установщик работает как пользователь TrustedInstaller (администратор) в режиме повышенных прав. По умолчанию рабочая папка cmd.exe с повышенными правами составляет C:\Windows\System32. Там нет никакого способа (или, по крайней мере, я не знаю, один), чтобы заставить рабочую папку для повышенных cmd.exe отличаться. (Учтите последствия для безопасности запуска с повышенными правами cmd -c some.cmd из случайной папки)

Ваш скрипт может взять папку, в которой он находится, и изменить текущую папку следующим образом:

setlocal
pushd %~dp0

rem ... script logic ...

popd
endlocal

Вы можете посмотреть различные условия, которые позволят вам указать, когда ваше пользовательское действие должно выполняться в @Cheeso, ответьте на его собственный вопрос , как запускать пользовательское действие только при удалении . (Не хочу дублировать эту информацию без необходимости)

Обновление: Если NOT INSTALLED не подходит для конкретного сценария, попробуйте NOT REMOVE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...