Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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
Installation WIX:在C#CustomActions和随后显示的WIX对话框之间持久化会话数据_Installation_Wix_Windows Installer_Session Variables_Persistent - Fatal编程技术网

Installation WIX:在C#CustomActions和随后显示的WIX对话框之间持久化会话数据

Installation WIX:在C#CustomActions和随后显示的WIX对话框之间持久化会话数据,installation,wix,windows-installer,session-variables,persistent,Installation,Wix,Windows Installer,Session Variables,Persistent,我是WIX的新手,我的任务是创建一个安装程序 以下是: *在不覆盖App.Config文件的情况下部署应用程序的构建 申请 *加载App.Config文件中的键/值,并向用户提示 “默认值”(现有值)并允许它们在完成之前修改它们 *保存用户提供的值(如果用户没有 更改)返回到App.Config文件以与应用程序一起使用 我已经成功地将WIX Dillalogs和自定义操作部署在哪里 InstallFinalize之后,将执行我的“LoadDefaultOptions”自定义操作, 它成功获取安装

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

*在不覆盖App.Config文件的情况下部署应用程序的构建 申请

*加载App.Config文件中的键/值,并向用户提示 “默认值”(现有值)并允许它们在完成之前修改它们

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

我已经成功地将WIX Dillalogs和自定义操作部署在哪里 InstallFinalize之后,将执行我的“LoadDefaultOptions”自定义操作, 它成功获取安装目录和应用程序配置文件 名称,将其加载到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" />
<Property Id="CCPCONNECTIONSTRING" Secure="yes" ></Property>

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

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

…并且LoadDefaultOptions customAction覆盖会话变量,如 这:

会话[“CCPCONNECTIONSTRING”]=; 根据会话日志,这可以按预期工作,xml解析可以工作,并且 会话变量已设置

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

如何让对话框“读取”被重写的会话变量 海关行动

最后,我想从应用程序配置中加载这些值,并提示它们返回 在退出屏幕上的可选对话框提示下发送给用户 远,除了没有得到更新的会话变量),然后从 在提示对话框中,运行另一个自定义操作以重新写入App.Config 具有自定义对话框中提供的设置的文件

我就是不能让会话变量持续存在


有什么想法吗?我以这种方式使用会话是否完全偏离了基准?否则,我如何解析app.config文件,并允许安装用户更改应用程序设置(如果不是通过会话)?

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

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

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

因此,我无法在首次安装时从我的App.Config读取和提示用户,因为在可能的时间段内,该文件将永远不会被部署。。。。似乎只有在升级过程中,App.Config文件存在于先前安装的位置,与原始安装的位置相同


我将从这个角度出发,在新安装期间没有(或硬编码的)默认设置,并尝试在升级安装期间解析和使用现有app.config设置作为默认设置。。。那应该能满足我的要求

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

因此,我无法在首次安装时从我的App.Config读取和提示用户,因为在可能的时间段内,该文件将永远不会被部署。。。。似乎只有在升级过程中,App.Config文件存在于先前安装的位置,与原始安装的位置相同


我将从这个角度出发,在新安装期间没有(或硬编码的)默认设置,并尝试在升级安装期间解析和使用现有app.config设置作为默认设置。。。那应该能满足我的要求

我在installFiles之后尝试过,但结果还是一样令人失望。。。(即,将文件放到installdir中,然后运行自定义操作来解析转储的app.config)。。。应用程序是我们在环境中设置的计划任务,用户不能直接运行,因此在安装时“设置”是唯一的逻辑选项。它是更大解决方案的一部分,但需要尽可能自动地部署。。。更一般地说,如何使用自定义操作修改的会话变量作为WIX对话框中编辑字段的值?如果要在对话框中使用它们,则自定义操作必须在InstallWelcome之前在UI序列中运行。它还必须作为即时执行运行,才能设置属性。升级期间将读取您的app.config,但在初始安装期间它还不存在,因此您必须具有默认值。此外,您的用户可能希望传入覆盖值和/或以静默方式使用安装。我建议阅读:(