2014-01-10 3 views
2

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

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 «Автоматизированный администратор»/F MSI (ы) (B4: 44) [09:28 : 45: 777]: вызов удаленных пользовательских действий. DLL C: \ Windows \ Installer \ MSIBB52.tmp, Entrypoint: 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> 
+0

У меня такая же проблема и конфигурация. Установщик имеет x86 и отлично работает на нескольких компьютерах x64, но с этой проблемой не удается выполнить первую установку на планшете x86 Win 8 Pro. – Brent

+0

Похоже, что CustomAction для моего планшета x86, скорее всего, не работает как admin. (Несмотря на то, что администратор UAC запрашивает установку), так как при добавлении вручную этой задачи он не удаляется при установке. – Brent

+0

@Brent Вы можете удалить задачу с установленной установкой? Удаление никогда не работает для меня. Можете ли вы опубликовать фрагменты wix? – Cookie

ответ

2

Ваш код выглядит правильно, вот мой конфиг, который компилирует 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> 
+0

Поскольку у вас есть Return set, чтобы игнорировать, он работает или вы просто не замечаете ошибку? – Adkins

+0

Да, это работает, думаю, что я игнорирую ошибку, которую невозможно удалить, но поскольку она установлена ​​только при REMOVE = "ALL", код удаления вообще не будет выполняться, если не будет обновлен/удален. Это правильное действие в этой ситуации и то, что делают все остальные. У вас нет времени, чтобы удвоить проверку, запустив его с протоколированием. – Brent

Смежные вопросы