Запуск пакетного файла, который планирует задачу с Wix при удалении

У меня есть следующий XML в моем файле.wxs для запуска командного файла при удалении:

<InstallExecuteSequence>
  <Custom Action="uninstall_action" After="InstallInitialize">Installed AND NOT UPGRADINGPRODUCTCODE</Custom>
</InstallExecuteSequence>

а также

<Fragment>
  <CustomAction 
    Id         ="uninstall_action"
    Directory  ="INSTALLDIR"
    ExeCommand ="&quot;[INSTALLDIR]uninstallTester.bat&quot;"
    Execute    ="deferred"
    Impersonate="no"
  />
</Fragment>

Поэтому он должен запустить командный файл, расположенный в каталоге установки. Мой командный файл выглядит так:

schtasks /Create /F /SC ONCE /ST 22:05 /TN exampleUninstall /TR "echo hello" 2> batch_log.log

Когда я запускаю деинсталлятор, я получаю следующее в batch_log.log:

ERROR: No mapping between account names and security IDs was done.
(40,4):UserId:

Похоже, что проблема связана именно с созданием новой запланированной задачи, потому что, если я изменю пакет, чтобы удалить запланированную задачу, она запускается без ошибок. Итак, мой вопрос: как я могу запланировать выполнение этого одноразового задания? Также будет работать и сам пакетный файл, у него просто проблема при вызове деинсталлятором.

Я также попытался погуглить эту конкретную ошибку без удачи.

Я упростил свой фактический вариант использования, поэтому я не могу просто переместить команду schtasks в ExecCommand в установщике, она должна находиться внутри пакетного файла (на самом деле она будет жить внутри исполняемого файла, но я подумал, что этот пакетный пример проще)

1 ответ

Решение

Вы можете попробовать добавить /RU "SYSTEM" в ваш cmd. Я никогда не запускал schtasks, но это может сработать? Похоже, что есть некоторая путаница между пользователем, вошедшим в систему, но выполняющим задачи в контексте системы.

Другие вопросы по тегам