我是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文件,并允许安装用户更改应用程序设置,如果不是会话?
答案 0 :(得分:1)
显然,我尝试做的部分内容或多或少是不可能的......你无法在InstallExecuteSequence中修改会话变量以便在对话框中使用......这只能在InstallUISequence中完成... < / p>
因此,我无法在第一次安装时从我的App.Config中读取和提示用户,因为在可能的情况下,该文件永远不会被部署....似乎这是唯一可行的时间在UPGRADE期间,App.Config文件存在于之前安装的原始安装所在的同一位置。
我将从这个角度出发,在全新安装期间使用NO(或硬编码)默认设置,尝试在升级安装期间解析并使用默认设置EXISTING app.config设置。 ..那应该照顾我的要求!
答案 1 :(得分:0)
如果您在InstallFinalize之后安排自定义操作,则在托管安装/ UAC类型故事期间它不会升级。我还有一个问题,您是否考虑将此配置数据移至应用程序,以便将其作为首次运行模式进行管理?