我试图使用WiX安装程序在cmd中运行一个自定义命令。
我在整个安装过程中正确地使用了Product.wxs中的包含文件。
我有3个自定义动作,其中2个是很好的。似乎不起作用的是:
<CustomAction Id='AddDefaultDomain'
Directory='TARGETDIR'
Impersonate="no"
Execute="immediate"
ExeCommand="C:\windows\system32\inetsrv\appcmd.exe set config /section:basicAuthentication /defaultLogonDomain:[%USERDOMAIN] /commit:apphost"
Return="asyncNoWait" />
安装程序运行正常,当我通过cmd窗口调用AppCmd并复制>粘贴cmd中的'ExeCommand‘并执行它时,它工作得很好。
也许这很简单,但就目前而言,我不明白为什么它不起作用。
所有的帮助都是感激的。
全文包含文件
<?xml version="1.0" encoding="utf-8"?>
<Include>
<!-- Create Scheduled Task -->
<InstallExecuteSequence>
<Custom Action="CreateScheduledTaskGoogleService" After="InstallFiles">NOT Installed</Custom>
<Custom Action="CreateScheduledTaskGoogleServiceId" After="CostFinalize">NOT Installed</Custom>
<!-- Add Defualt DOmain -->
<Custom Action="AddDefaultDomain" After="CostFinalize">NOT Installed</Custom>
</InstallExecuteSequence>
<CustomAction Id="CreateScheduledTaskGoogleService" Return="check" Impersonate="no" Execute="deferred" BinaryKey="WixCA" DllEntry="CAQuietExec" />
<CustomAction Id="CreateScheduledTaskGoogleServiceId" Property="CreateScheduledTaskGoogleService" Execute="immediate" Value=""[SystemFolder]SCHTASKS.EXE" /CREATE /TN "ActaNet Control - Google Sync" /XML "[INSTALLFOLDERPROGRAMFILESGOOGLE]ScheduledTask.xml"" />
<!-- DOES NOT SEEM TO BE WORKING! -->
<CustomAction Id='AddDefaultDomain'
Directory='TARGETDIR'
Impersonate="no"
Execute="immediate"
ExeCommand="C:\windows\system32\inetsrv\appcmd.exe set config /section:basicAuthentication /defaultLogonDomain:[%USERDOMAIN] /commit:apphost"
Return="asyncNoWait" />
<!-- Delete Scheduled Task -->
<InstallExecuteSequence>
<Custom Action="TaskDeleteGoogleService" Before="CreateScheduledTaskGoogleService">REMOVE="ALL"</Custom>
</InstallExecuteSequence>
<CustomAction Id="TaskDeleteGoogleService" Return="ignore" Execute="deferred" Directory="TARGETDIR" Impersonate="no" ExeCommand="SCHTASKS.EXE /DELETE /TN "ActaNet Control - Google Sync" /F" />
</Include>
发布于 2015-09-01 10:57:07
我要做的第一件事就是确认命令实际上正在被执行。使用像这样的工具来确认这一点。
完成此操作后,我将查看命令是否正在修改目标系统上需要提升特权的内容。如果是这样的话,我会将Execute属性的值更改为“延迟”,并查看它是否有效。似乎您正在尝试使用即时模式自定义操作来更改目标系统上的某些内容。将操作标记为延迟还需要将操作放在"InstallInitialize“和"InstallFinalize”之间。
在目前的情况下,您正在尝试在立即模式下启动exe。即时模式模拟登录用户,因此在UAC环境中,任何修改目标系统的自定义操作都可能失败。
希望这能有所帮助。
发布于 2015-09-07 08:51:20
首先,将自定义操作的“执行”更改为“Deffered”,因为您没有即时类型的系统权限。
其次,使用loggging来查看安装过程中发生了什么。使用下面的concole命令将创建用于安装过程的日志文件,该文件位于YourInstaller.msi中的同一个文件夹中:
msiexec -i YourInstaller.msi -l*v log.txt
您可以通过自定义操作名在结果log.txt文件中查找安装程序试图执行时发生的情况。
https://stackoverflow.com/questions/32329437
复制相似问题