我是 WIX 的新手,我的任务是创建一个执行以下操作的安装程序:
*在不覆盖应用程序的 App.Config 文件的情况下部署我们的应用程序的构建
*加载 App.Config 文件中的键/值并提示用户“默认值”(现有值)并允许他们在完成之前修改它们
*将用户提供的值(或默认值,如果用户未进行更改)保存回 App.Config 文件以供应用程序使用。
我已经成功布置了 WIX 对话和自定义操作,在 InstallFinalize 之后,我的“LoadDefaultOptions”CustomAction 被执行,它成功获取安装目录和应用程序配置文件名,将其加载到 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 像这样覆盖会话变量:
session["CCPCONNECTIONSTRING"] = <value parsed from file>;
根据会话日志,这按预期工作,xml 解析工作,并且会话变量已设置。
我的问题是当我的自定义对话框在 LoadDefaultOptions CustomAction 运行后提示用户使用这些存储的默认值时。会话变量的原始属性值似乎“卡住”了,而不是被通过 xml 文件加载默认值并将它们存储在会话中的自定义操作覆盖。(它们是空白的,因为它们的原始属性已定义,或者在我定义它们的情况下,它们显示这些值而不是会话写入值)
如何让对话框通过 CustomActions “读取”覆盖的会话变量?
最终我想从应用程序配置中加载这些值,在退出屏幕的可选对话框提示中将它们提示给用户(到目前为止,除了没有更新会话变量之外,它有效),然后从该提示对话框中执行命令,运行另一个自定义操作以使用自定义对话框提供的设置重写 App.Config 文件...
我就是无法让会话变量持久化!!!
有任何想法吗?我是否完全不在基地尝试以这种方式使用会话?如果不是通过会话,我还能如何解析 app.config 文件,并允许安装用户更改应用程序设置?