更新
现在已经解决了,所以我为未来的读者更新了这篇文章
我在这方面遇到了困难。关于这些lot有一个of SO articles settings,但我被卡住了。
我的目标是执行两个步骤:
1)读取将随msi物理一起提供的文件。换句话说,将有三个文件setup.exe,test.msi,specialFile.txt
2)在安装过程中,我想在安装路径中创建一个新文件。 C:\ Program Files \ MyCompany \ MyApplication \ newFile.txt
步骤2中的文件是通过读取步骤1中的specialFile.txt中的内容创建的。
我的问题是导航WiX设置的模糊组合,使我能够读取会话变量并具有足够高的权限来写出文件。这并不容易。
以下是解决方案:
<Binary Id="MyCustomAction.CA.dll" SourceFile="path\to\MyCustomAction.CA.dll" />
<CustomAction Id="MyActionsName"
Return="check"
Execute="deferred"
BinaryKey="MyCustomAction.CA.dll"
DllEntry="MyCustomAction"
Impersonate="no"/>
<CustomAction Id="CustomAction1"
Property="MyActionsName"
Value="INSTALLFOLDER=[Get_This_From_Your_Directory_Tag];SOURCEDIR=[SourceDir]"/>
<InstallExecuteSequence>
<Custom Action="CustomAction1" Before="MyActionsName" />
<Custom Action="MyActionsName" Before="InstallFinalize">NOT Installed AND NOT PATCH</Custom>
</InstallExecuteSequence>
impersonate="no"
,以便有足够的私人来写文件"deferred"
以获得足够的权限来写入文件Before="InstallFinalize"
,这是在安装文件之后。 然后在C#代码中,执行以下操作:
string sourceDir = session.CustomActionData["SOURCEDIR"]
string installFolder = session.CustomActionData["INSTALLFOLDER"]
其他有用的参考资料:
This article和this article关于延期操作中的自定义属性。
This article显示了如何在不使用会话[&#34; SourceDir&#34;]的情况下阅读SourceDir,因为自定义操作是延迟的。