我有一个需要提升权限的自定义操作。此自定义操作的目的是运行sc.exe并删除Windows附带的服务(w32time)的服务触发器。
以下是重要的片段:
<Property
Id="removeW32TimeTrigger"
Value=""[SystemFolder]sc.exe" triggerinfo w32time delete"
/>
<CustomAction
Id="removeW32TimeTrigger"
BinaryKey="WixCA"
DllEntry="CAQuietExec"
Execute="deferred"
Return="ignore"
Impersonate="no"
/>
<InstallExecuteSequence>
<Custom Action="removeW32TimeTrigger" After="InstallInitialize" />
</InstallExecuteSequence>
我在这里遵循了延迟执行的示例: http://wixtoolset.org/documentation/manual/v3/customactions/qtexec.html
日志中的错误似乎在我的语法中找不到sc.exe。
Action 11:36:48: removeW32TimeTrigger.
CAQuietExec: Command string must begin with quoted application name.
CAQuietExec: Error 0x80070057: invalid command line property value
CAQuietExec: Error 0x80070057: failed to get Command Line
我明显做错了什么。任何帮助将不胜感激。
答案 0 :(得分:9)
由于您在延迟中运行CA,因此您需要使用类型51自定义操作而不是使用Property发送CustomActionData。
试试这个,看它是否有效:
<CustomAction Id='removeW32TimeTrigger_set'
Property='removeW32TimeTrigger'
Value='"[SystemFolder]sc.exe" triggerinfo w32time delete'
Execute='immediate'/>
<CustomAction
Id="removeW32TimeTrigger"
BinaryKey="WixCA"
DllEntry="CAQuietExec"
Execute="deferred"
Return="ignore"
Impersonate="no"
/>
<InstallExecuteSequence>
<Custom Action="removeW32TimeTrigger_set" After="CostFinalize" />
<Custom Action="removeW32TimeTrigger" After="InstallInitialize" />
</InstallExecuteSequence>