Wix Удалить пользовательское действие не удалось

Я пытаюсь заставить мой установщик использовать настраиваемое действие для удаления запланированной задачи при удалении приложения. Пользовательское действие для создания CreateScheduledTask работает правильно, однако удалить не удалось.

MSI (s) (B4:D8) [09:28:45:761]: Note: 1: 1721 2: RemoveScheduledTask 3: C:\Foobar\ 4: "C:\Windows\SysWOW64\SCHTASKS.EXE" /DELETE /TN "Automated Admin" /F 

Информация 1721. Проблема с этим пакетом установщика Windows. Программа, необходимая для завершения этой установки, не может быть запущена. Обратитесь в службу поддержки или к поставщику пакета. Действие: RemoveScheduledTask, расположение: C: \ Foobar \, команда: "C: \ Windows \ SysWOW64 \ SCHTASKS.EXE" / DELETE / TN "Automated Admin" / F MSI (s) (B4: 44) [09:28: 45: 777]: вызов удаленного настраиваемого действия. DLL: C: \ Windows \ Installer \ MSIBB52.tmp, точка входа: CommitIIS7ConfigTransaction

Синтаксис правильный, если я запустил

"C:\Windows\SysWOW64\SCHTASKS.EXE" /DELETE /TN "Automated Admin" /F 

из командной строки правильно снимает задачу.

<!-- Code for setting the automated task-->
<CustomAction Id="CreateScheduledTask" 
Return="check" 
Impersonate="no" 
Execute="deferred" 
Directory="INSTALLLOCATION" 
ExeCommand="&quot;[SystemFolder]SCHTASKS.EXE&quot; /CREATE /SC MINUTE /MO 15 /TN &quot;Automated Admin&quot;  /TR &quot;[AutomatedAdmin]FooBar.exe&quot; /RU &quot;NT Authority\System&quot; /RP /RL HIGHEST" />

Фрагменты Wix

<CustomAction Id="RemoveScheduledTask" 
Return="ignore" 
Impersonate="no" 
Execute="deferred" 
Directory="INSTALLLOCATION" 
ExeCommand="&quot;[SystemFolder]SCHTASKS.EXE&quot; /DELETE /TN &quot;Automated Admin&quot; /F" />

<InstallExecuteSequence>
  <Custom Action="CreateScheduledTask" Before="InstallFinalize">NOT Installed</Custom>
  <Custom Action="RemoveScheduledTask" Before="RemoveFiles">REMOVE="ALL"</Custom>
</InstallExecuteSequence>

person Cookie    schedule 10.01.2014    source источник
comment
У меня точно такая же проблема и конфигурация. Установщик - x86 и отлично работает на нескольких компьютерах x64, но не справляется с этой проблемой при первой установке на планшет x86 Win 8 Pro.   -  person Brent    schedule 10.02.2014
comment
Похоже, что CustomAction для моего планшета x86 не работает от имени администратора. (Несмотря на то, что администратор UAC запрашивает установку), поскольку, когда я вручную добавляю задачу, она не удаляется при установке.   -  person Brent    schedule 10.02.2014
comment
@Brent Удается ли удалить задачу с установленной нормально? Удаление никогда не работает для меня. Можете ли вы публиковать фрагменты wix?   -  person Cookie    schedule 10.02.2014
comment
Раньше все работало нормально, я думаю, это потому, что у меня был полностью отключен UAC. Я работаю над тем, чтобы заставить его работать с включенным UAC по умолчанию. Я опубликую конфигурацию в качестве ответа чуть позже. Пытаюсь понять это.   -  person Brent    schedule 10.02.2014
comment
О, проблема с удалением на планшете не работает в том, что у меня была установлена ​​предыдущая версия (довольно старая), и программа удаления зависала. Итак, как только я исправил зависимость и удалил ее, теперь все работает правильно.   -  person Brent    schedule 10.02.2014


Ответы (1)


Ваш код выглядит правильно, вот моя конфигурация, которая компилируется в x86 .msi, и я тестировал ее на Windows 8.1 x64 / x86 и Windows Server 2008r2 x64. Когда UAC установлен по умолчанию и отключен. (.msi запросит разрешение администратора)

<CustomAction Id="TaskDelete" Return="ignore" Execute="deferred" Directory="TARGETDIR" Impersonate="no"
 ExeCommand="SCHTASKS.EXE /DELETE /TN &quot;My Client Service&quot; /F" />

<CustomAction Id="TaskCreate" Return="check" Execute="deferred" Directory="TARGETDIR" Impersonate="no" 
 ExeCommand="SCHTASKS.EXE /CREATE /SC MINUTE /MO 20 /TN &quot;My Client Service&quot; /TR &quot;sc.exe start My_Client_Service&quot; /RU SYSTEM /RP /RL HIGHEST /F" />

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFilesFolder">
    <Directory Id="INSTALLDIR" Name="My Company" >
...components...
   </Directory>
  </Directory>
</Directory>

<InstallExecuteSequence>
  <!--Remove task on Uninstall or Upgrade-->
  <Custom Action='TaskDelete' Before="TaskCreate">REMOVE="ALL"</Custom>
  <!--Add task on Install or Upgrade-->
  <Custom Action='TaskCreate' Before="InstallFinalize">(NOT Installed) OR UPGRADINGPRODUCTCODE</Custom>
</InstallExecuteSequence>
person Brent    schedule 10.02.2014
comment
Поскольку у вас установлен Return для игнорирования, он работает или вы просто не замечаете ошибку? - person Christopher B. Adkins; 12.02.2014
comment
Да, это работает, думаю, я игнорирую ошибку, которую невозможно найти для удаления, хотя из-за того, что он настроен на запуск только при REMOVE = ALL, код удаления обычно не запускается, если не обновить / удалить. Это правильное действие в данной ситуации и то, что делают все остальные. Сейчас нет времени на двойную проверку, запустив ее с ведением журнала. - person Brent; 12.02.2014