我有一个WIX(V3.11.1)安装程序,在该程序中,我将根据传递给自定义操作的值创建一个FileInfo。传递给自定义操作的值是正确的,session.CustomActionData["INSTALLFOLDER"]
返回正确的路径,即C:\Program Files(x86)\MyApplication
。
不幸的是,当我创建FileInfo targetDir = new FileInfo(session.CustomActionData["INSTALLFOLDER"])
时,targetDir.FullName
的结果是C:\Windows\Installer\MSIE335.tmp-\C:\Program Files(x86)\MyApplication\
。
我试图找到关于FileInfo构造函数如何工作的任何信息,但是没有任何结果。您是否知道为什么C:\Windows\Installer\MSIE335.tmp-\
出现在FileInfo中,以及如何使用真正的路径创建它?
用于检查所有值的代码:
string path = session.CustomActionData["INSTALLFOLDER"];
session.Log(path); //result is C:\Program Files(x86)\MyApplication
FileInfo targetDir = new FileInfo(path);
session.Log(targetDir.FullName); // result is C:\Windows\Installer\MSIE335.tmp-\C:\Program Files(x86)\MyApplication\
发布于 2019-04-01 14:22:46
我的设置感觉是猜测INSTALLFOLDER
在您的CustomActionData
中的值实际上是[INSTALLFOLDER]
值。在日志记录时,该语法将被解析为其适当的值。这就是它看起来不错的原因。但是,FileInfo
实际得到的值如下:
FileInfo targetDir = new FileInfo("[INSTALLFOLDER]");
当然,它是“当前目录中名为"INSTALLFOLDER”的文件“。与您的第二条日志行相匹配。
修复方法是确保在您的中传递 INSTALLFOLDER
的INSTALLFOLDER
值。根据计划延迟自定义操作和设置命名属性的方式,有几种不同的方法可以做到这一点。例如,使用SetProperty
应该是修复它的简单方法。
更新: Hawex提供了定义自定义操作的代码片段。看上去:
<Property Id="CustomActionOnInstall" Value="INSTALLFOLDER=[INSTALLFOLDER]" />
<CustomAction Id="CustomActionOnInstall" BinaryKey="CustomActions" Execute="deferred"
Impersonate="no" DllEntry="OnInstall" Return="check" />
<InstallExecuteSequence>
<Custom Action="CustomActionOnInstall" Before="InstallFinalize">NOT Installed</Custom>
</InstallExecuteSequence>
要修复,只需将静态(未评估) Property
更改为SetProperty
,如下所示:
<SetProperty Id="CustomActionOnInstall" Value="INSTALLFOLDER=[INSTALLFOLDER]"
Before="CustomActionOnInstall" Sequence="execute" />
https://stackoverflow.com/questions/55455799
复制相似问题