此自定义操作失败。
<CustomAction Id="SetIntegrityLevel" Return="check"
Directory="TARGETDIR" Impersonate="no" Execute="deferred"
ExeCommand="cmd /c icacls UiProxy.exe /SetIntegrityLevel High & pause" />
使用cmd /c blah blah & pause
开展业务是了解失败的命令行操作中可见情况的小技巧。
UiProxy.exe: The system cannot find the file specified.
Successfully processed 0 files; Failed processing 1 files
Press any key to continue . . .
这有点令人惊讶。 UiProxy.exe肯定在TARGETDIR指定的文件夹中。
有没有办法将INSTALLDIR符号解析为命令字符串?我需要制作这样的东西。
icacls "C:\Program Files (x86)\UiProxy\UiProxy.exe" /SetIntegrityLevel High
显然我需要明确地引用引号,如下所示:
<CustomAction Id="SetIntegrityLevel" Return="check"
Directory="TARGETDIR" Impersonate="no" Execute="deferred"
ExeCommand="icacls "[INSTALLDIR]UiProxy.exe" /SetIntegrityLevel High" />
我把[INSTALLDIR]放在哪里我需要解析符号。问题是如何表达这一点。
答案 0 :(得分:0)
后来在代码中我没有发布,因为它是标准的样板文件,我注意到了这一点:
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="UiProxy" />
</Directory>
</Directory>
</Fragment>
将命令行指定为
<CustomAction Id="SetIntegrityLevel" Return="check"
Directory="TARGETDIR" Impersonate="no" Execute="deferred"
ExeCommand="cmd /c icacls "[INSTALLFOLDER]UiProxy.exe" /SetIntegrityLevel High & pause" />
生成一条成功消息,因此方括号语法看起来是正确的但是TARGETDIR是错误的符号,它应该是INSTALLFOLDER。