【发布时间】:2018-05-05 16:52:04
【问题描述】:
我想将安装目录传递给我的不同自定义操作。我有财产
<Property Id="CA1Action" Value="InstallDir=[INSTALLFOLDER]"/>
然后我在 Wix 中定义了一个 CA
<CustomAction Id="CA1Action"
BinaryKey="InstallerActionsBinary"
DllEntry="CA1"
Execute="commit"
Return="check" />
为了完成,我将我的 CA 称为
<Custom Action="CA1Action" After="InstallFiles"></Custom>
使用 MSIEXEC 执行我的安装程序时,我从尝试从安装中打开文件的自定义操作中收到以下错误消息:
找不到文件“C:\Windows\Installer\MSICA8C.tmp-\C:\Program Files\MyProgram\web.config”。
这是我从会话中提取信息的方式:
public static ActionResult CA1(Session session_)
{
//Collect parameters from Session
CustomActionData data = session_.CustomActionData;
string path = data["InstallDir"];
}
我的第一个问题是为什么安装程序的缓存添加到我的参数中?为了进一步增加我的困惑,当我添加时
path = path.Substring("C:\Windows\Installer\MSICA8C.tmp-\".Length);
到我的 CA 删除“C:\Windows\Installer\MSICA8C.tmp-\”,我得到一个参数异常,告诉我子字符串的起始值高于我的字符串的长度..所以我添加了登录到我的 CA,并且看到路径设置为“[INSTALLFOLDER]”,而不是属性的值,但是当我在 FileStream 的路径中使用它时,它的属性值如何?
我正在关注这篇文章中的回复:How to pass parameters to the custom action?
【问题讨论】:
-
为什么这个编辑说不一样?只有一个 CA 有问题。它们是延迟操作。不一样。
-
详细日志文件对 CA1Action 的值表示什么?在我看来,它应该包含文字方括号,因为您是在前面定义它的值,而不是通过 set-property 自定义操作(如您所指问题的答案所示)。
标签: c# wix windows-installer custom-action