Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WIX在自定义操作上设置会话属性并访问它_C#_.net_Wix - Fatal编程技术网

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

C# WIX在自定义操作上设置会话属性并访问它,c#,.net,wix,C#,.net,Wix,我有一个custum操作,在该操作中,我调用一个安装在ProgramFiles文件夹中的dll。在自定义操作中,我正在准备一个文本,该文本应在安装结束时显示给正在安装我的程序的人员。 自定义操作的执行工作正常,即使在自定义操作中为会话分配值也可以毫无例外地完成 session["SEIA"] = "of the installation"; MessageBox.Show(session["SEIA"]); messagebox正在显示正确的文本。 现在在.wxs中完成以下操作: <Pr

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

session["SEIA"] = "of the installation";
MessageBox.Show(session["SEIA"]);
messagebox正在显示正确的文本。 现在在.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文件,所以需要在InstallFinalize之后使用Custom Action=“custactionID”。
提前感谢您的帮助。

我为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复制到定义的位置,最后删除临时文件夹中的文件夹。删除临时文件夹的原因是执行的dll仍在使用中,无法删除。(无法了解appdomain的工作原理:-()。无论如何,谢谢!!!

你能用msi日志运行你的安装吗?msiexec/i your installer.msi/l*v msilog.txt,然后在日志中查找SEIA的值?我猜你将有一个SEIA条目,其中有个条目在行中,它将是正确的值,然后你将有一个SEIA和(c)在带有默认值的行上。是的,确实如此。那么我可以做什么来解决此问题?