C# Wix:自定义操作中二进制文件的路径

C# Wix:自定义操作中二进制文件的路径,c#,.net,installation,wix,windows-installer,C#,.net,Installation,Wix,Windows Installer,我的wxs文件中有以下代码 <Directory Id="TempFolder" Name="Temp"> <Component Id="TempExes" Guid="DF92ED79-28AB-4E88-81F2-8B035D4B8A01" DiskId="1"> <File Id="CACLS_EXE" Name="CACLS.EXE" Source="Binary\CALCS.EXE" /> </Compone

我的wxs文件中有以下代码

<Directory Id="TempFolder" Name="Temp">
    <Component Id="TempExes" Guid="DF92ED79-28AB-4E88-81F2-8B035D4B8A01" DiskId="1">
          <File Id="CACLS_EXE" Name="CACLS.EXE" Source="Binary\CALCS.EXE" />
    </Component>
</Directory>
这不管用。
有什么想法吗?谢谢。

为什么您一开始就要用自定义操作来使用CACL呢?WiX/MSI已具有功能。保持声明性不是必须的,安装程序的质量将大大提高,同时通过不重新发明轮子节省时间。

您是否尝试过:

<Directory Id="TEMPFOLDER" Name="Temp">
    <Component Id="TempExes" Guid="DF92ED79-28AB-4E88-81F2-8B035D4B8A01" DiskId="1">
      <File Id="CACLS_EXE" Name="CACLS.EXE" Source="Binary\CALCS.EXE" />
    </Component>
</Directory>
公共财产都有上限


我已经有一段时间没有使用wix了,但如果我没记错的话,如果您的自定义操作计划在对系统进行更改的安装期间运行,那么如果您希望能够访问信息,则必须使用特殊属性。

自定义操作计划在何时执行?这会影响您访问该属性的方式。此外,TempFolder可能需要全部大写。嗯……这只是一个例子。我没有使用CACLS.exe,实际上我使用的是makecert.exe。如果Wix有这个功能,那就太好了。否则,这并不能回答我的问题。当有人说“我有下面的代码”时,我怎么知道这是某种抽象?如果您使用的是MakeCert.exe,我想指出,该文件是Microsoft.NET Framework SDK的一部分,不可再发行。既然您提到了会话类,我假设您使用的是C#DTF。我会编写自己的代码来创建证书。您可能想阅读实际的许可证文件,而不是一些未指明的论坛帖子的法律资料。这个文件:\Microsoft Visual Studio 9.0\redist.txt清楚地表明,我可以“未经修改”地重新分发makecert.exe。海报上有MSFT的签名,我知道通常会出现Gacutil.exe,所以我不必费心去做更多。我还想指出,MS说makecert只用于测试。出于安全原因,你不应该在生产系统中实际使用它。
<Directory Id="TEMPFOLDER" Name="Temp">
    <Component Id="TempExes" Guid="DF92ED79-28AB-4E88-81F2-8B035D4B8A01" DiskId="1">
      <File Id="CACLS_EXE" Name="CACLS.EXE" Source="Binary\CALCS.EXE" />
    </Component>
</Directory>
var pathToExe = session.GetTargetPath("TEMPFOLDER") + "CACLS.exe"