如何在WIX自定义操作中解析路径

时间:2016-06-27 07:16:00

标签: wix

此自定义操作失败。

<CustomAction Id="SetIntegrityLevel" Return="check" 
  Directory="TARGETDIR" Impersonate="no" Execute="deferred"
  ExeCommand="cmd /c icacls UiProxy.exe /SetIntegrityLevel High &amp; pause" />

使用cmd /c blah blah &amp; 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 &quot;[INSTALLDIR]UiProxy.exe&quot; /SetIntegrityLevel High" />

我把[INSTALLDIR]放在哪里我需要解析符号。问题是如何表达这一点。

1 个答案:

答案 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 &quot;[INSTALLFOLDER]UiProxy.exe&quot; /SetIntegrityLevel High &amp; pause" />

生成一条成功消息,因此方括号语法看起来是正确的但是TARGETDIR是错误的符号,它应该是INSTALLFOLDER。