繁体   English   中英

WIX在自定义操作上设置会话属性并访问它

[英]WIX set session property on custom action and access it

我有一个习惯的动作,在这里我叫一个正在程序文件文件夹中安装的dll。 在自定义操作中,我正在准备一个文本,该文本应在安装结束时显示给正在安装我的程序的人员。 自定义动作的执行工作正常,即使将值分配给自定义动作中的会话也可以毫无例外地完成

session["SEIA"] = "of the installation";
MessageBox.Show(session["SEIA"]);

消息框显示正确的文本。 现在,在.wxs中完成以下操作:

<Property Id="SEIA" Value="test 1234"/>
<Property Id="WIXUI_EXITDIALOGOPTIONALTEXT" Value="this is the value at the end"/>
<CustomAction Id="custactionID" BinaryKey="cust_actions" DllEntry="custActionMeth" Execute="immediate" Return='check'/>
<CustomAction Id="CA_Set_WIXUI_EXITDIALOGOPTIONALTEXT" Property="WIXUI_EXITDIALOGOPTIONALTEXT" Value="this is the value at the end [SEIA]" Return='check'/>
<InstallExecuteSequence>
  <Custom Action="custactionID" After="InstallFinalize" />
  <Custom Action="CA_Set_WIXUI_EXITDIALOGOPTIONALTEXT" After="custactionID">NOT Installed</Custom>
</InstallExecuteSequence>

现在在安装结束时应该是一个可选文本,它是:

这是安装结束时的值

但唯一显示的是:

这是最终测试1234的值

一些其他信息:因为我现在只能访问安装文件夹中的dll文件,因此需要Custom Action =“ custactionID” After =“ InstallFinalize”。 先谢谢您的帮助。

我想出了WIX行为的解决方案。 主要问题是传递到GUI的信息是在客户端部分进行的。 将dll复制到目的地的工作是在服务器部分完成的。 因此,不可能在两个部分之间进行通信。 因此,我该如何访问客户端部分中的dll。 把事情做好是个问题。 这很简单。 我将所有dll解压缩到一个临时文件夹中,

 string tempFold = @"C:\Windows\Temp\Extract";
        deleteDissTemp();
        Directory.CreateDirectory(tempFold);
        string parameters = string.Empty;
        parameters = string.Format(@"/a {0} /qn TARGETDIR=""{1}"" REINSTALLMODE=a", Path.Combine(path2Source, "DiSetup.msi"),
            tempFold);
        Process process = Process.Start("msiexec", parameters);
        process.WaitForExit();

然后我将需要的dll使用它们(通过执行dll),获取gui的信息并将其存储在会话中。 从使用中的msi包提取dll时,我没有遇到任何问题。 然后,我启动服务器部分,将dll复制到定义的位置,最后删除temp文件夹中的该文件夹。 删除temp文件夹的原因是已执行的dll仍在使用中,无法删除。(无法弄清appdomain的工作方式:-()。无论如何,谢谢!!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM