WIX:在C#CustomActions之间保留会话数据,随后显示WIX对话框

时间:2010-07-08 19:17:15

标签: installer wix windows-installer session-variables persistent

我是WIX的新手,他的任务是创建一个安装程序 以下内容:

*部署我们的应用程序版本,而不覆盖App.Config文件 申请

*加载App.Config文件中的键/值,并提示用户 “defaults”(现有值)并允许他们在完成

之前修改它们

*保存用户提供的值(如果用户没有,则默认值) 更改)返回App.Config文件以与应用程序一起使用。

我已经成功安排了WIX dilalog和自定义操作 在InstallFinalize之后,执行了我的“LoadDefaultOptions”CustomAction, 哪个成功获取安装目录和应用程序配置文件 name,将其加载到XML阅读器中,并解析键/值对,设置 它们以这种方式进入会话变量:

session[key.toUpper()] = value;

我的自定义操作定义为:

<CustomAction Id="LoadDefaultOptions" Return="asyncWait" Execute="immediate" BinaryKey="aeserverDbDialogPackage.dll" DllEntry="LoadDefaultOptions"/>
<CustomAction Id="SetConfigOptions" Return="check" Execute="immediate" BinaryKey="aeserverDbDialogPackage.dll" DllEntry="SetConfigOptions"/>

LoadDefaultOptions执行如下:

<Custom Action="LoadDefaultOptions" After="InstallFinalize" />

我有自定义对话框编辑属性设置如下:

<Control Id="CCPDbConnString" Type="Edit" X="20" Y="62" Width="150" Height="18" Property="CCPCONNECTIONSTRING" Indirect="no" />

WXS文件中有一个匹配的属性标记,如下所示:

<Property Id="CCPCONNECTIONSTRING" Secure="yes" ></Property>

... LoadDefaultOptions customAction会覆盖会话var 这样:

session["CCPCONNECTIONSTRING"] = <value parsed from file>;

根据会话日志,这可以正常工作,xml解析工作,和 会话变量已设置。

我的问题是当我的自定义对话框出现以提示用户时 在LoadDefaultOptions CustomAction运行之后存储的默认值。 会话变量的ORIGINAL属性值似乎“卡住” 而不是被加载默认值的自定义操作覆盖 通过xml文件并将它们存储在会话中。 (他们是空白的 定义原始属性,或者在我另外定义它们的情况下, 它们显示那些值而不是会话写入的值)

如何让Dialogs“读取”被覆盖的会话变量 CustomActions?

最终我想从app config加载这些值,然后提示它们 在退出屏幕上的可选对话框提示中给用户(这样做 远,除了没有得到更新的会话变量),然后从命令 在提示对话框中,运行另一个自定义操作以重新编写App.Config 文件,其中包含自定义对话框提供的设置...

我只是无法将会话变为PERSIST !!!

有什么想法吗?我是否完全偏离试图以这种方式使用会话?我怎么解析app.config文件,并允许安装用户更改应用程序设置,如果不是会话?

2 个答案:

答案 0 :(得分:1)

显然,我尝试做的部分内容或多或少是不可能的......你无法在InstallExecuteSequence中修改会话变量以便在对话框中使用......这只能在InstallUISequence中完成... < / p>

因此,我无法在第一次安装时从我的App.Config中读取和提示用户,因为在可能的情况下,该文件永远不会被部署....似乎这是唯一可行的时间在UPGRADE期间,App.Config文件存在于之前安装的原始安装所在的同一位置。

我将从这个角度出发,在全新安装期间使用NO(或硬编码)默认设置,尝试在升级安装期间解析并使用默认设置EXISTING app.config设置。 ..那应该照顾我的要求!

答案 1 :(得分:0)

如果您在InstallFinalize之后安排自定义操作,则在托管安装/ UAC类型故事期间它不会升级。我还有一个问题,您是否考虑将此配置数据移至应用程序,以便将其作为首次运行模式进行管理?