1

我是 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 文件,并允许安装用户更改应用程序设置?

4

2 回答 2

1

显然,我正在尝试做的部分事情或多或少是不可能的......您不能修改 InstallExecuteSequence 中的会话变量以在对话框中使用......这只能在 InstallUISequence 中完成......

因此,我无法在第一次安装时从我的 App.Config 读取和提示用户,因为在可以执行的时间段内永远不会部署该文件....似乎唯一可行的时间是在升级,其中 App.Config 文件存在于先前安装中,位于与原始安装相同的位置。

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

于 2010-07-13T14:11:10.307 回答
0

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

于 2010-07-08T22:07:02.590 回答