WiX安装程序-环境变量已随重新安装/修复一起删除



我正在使用WiX 3.11.1为Petrel插件创建一个WiX安装程序。Product.wxs本质上是以下一个,有几个修改:

https://github.com/davidbcc/DeCompactPlugIn/blob/dev/FaciesDecompactorInstaller/Product.wxs

我在向导中添加了一个页面,用户可以在其中的编辑框中指定许可证服务器。根据这些信息,我创建和/或更新了一个环境变量:

<!-- Get the current environment variable if it exists -->
<SetProperty Id="LICENSE_SERVER_ENV_VAR" Value="[%LIC_HOST]" After="LaunchConditions" Sequence="first"></SetProperty>

<snip>

<!-- Validate that the license server name is not empty before proceeding. -->
<Control Type="PushButton" Id="Next" X="239" Y="243" Width="56" Height="17" Default="yes" Text="Next">
<Publish Event="SpawnDialog" Value="ServerNameErrorDlg"><![CDATA[LICENSE_SERVER_ENV_VAR = ""]]></Publish>
<Publish Event="NewDialog" Value="ngenDialog"><![CDATA[LICENSE_SERVER_ENV_VAR <> ""]]></Publish>
</Control>

<snip>

<!-- Install the plugin and set the environment variable -->
<Fragment>
<ComponentGroup Id="PluginComponents" Directory="INSTALLLOCATION">
<Component Id="PetrelPluginPip" Guid="120AF5B9-E751-43F4-AF4C-7DED33C8BEB4">
<Environment Id="LicenseServerEnVar" Action="set" Name="LIC_HOST" System="yes" Permanent="yes" Value="[LICENSE_SERVER_ENV_VAR]"/>
<File Id="PetrelPluginPippip" Source="../OceanPluginPip/bin/$(var.OceanPluginPip.Platform)/$(var.OceanPluginPip.Configuration)/PetrelPluginPip.pip" KeyPath="yes" />
</Component>
</ComponentGroup>
</Fragment>

在初次安装和通过"添加/删除程序"进行操作时,一切似乎都运行良好。如果我在那里运行修复,它会静默运行,并且环境变量仍然存在。

但是,在安装后,如果我右键单击安装程序(实际的.msi文件(,选择"安装",然后在"维护"对话框中选择"修复"选项,我将再次执行向导。该页面正确地提取许可证服务器信息,就像初始安装时一样,但在完成修复后,环境变量将从系统中删除。

我试过:

  • 设置";将SetProperty上的"Sequence"设置为"both">
  • 将"Environment"标记放入其自己的组件中
  • 创建用于设置许可证服务器的CustomAction,然后在InstallExecuteSequence中使用该许可证服务器

这些都不起作用。

有人知道为什么通过MaintenanceDialog进行修复会导致删除环境变量吗?谢谢

EDIT:添加详细日志记录后,修复输出显示以下内容,这些内容似乎相关:

MSI (s) (60:78) [11:42:25:420]: PROPERTY CHANGE: Adding RestrictedUserControl property. Its value is '1'.
MSI (s) (60:78) [11:42:25:420]: PROPERTY CHANGE: Adding PETRELINSTALLLOCATION property. Its value is 'C:Program FilesSchlumbergerPetrel 2022'.
MSI (s) (60:78) [11:42:25:420]: Ignoring disallowed property INSTALLLOCATION
MSI (s) (60:78) [11:42:25:420]: Ignoring disallowed property LICENSE_SERVER_ENV_VAR
MSI (s) (60:78) [11:42:25:420]: Ignoring disallowed property TARGETDIR
Action start 11:42:25: LaunchConditions.
Action ended 11:42:25: LaunchConditions. Return value 1.
MSI (s) (60:78) [11:42:25:468]: Doing action: SetLICENSE_SERVER_ENV_VAR
MSI (s) (60:78) [11:42:25:468]: Note: 1: 2205 2:  3: ActionText 
Action start 11:42:25: SetLICENSE_SERVER_ENV_VAR.
MSI (s) (60:78) [11:42:25:469]: Skipping action due to msidbCustomActionTypeFirstSequence option.
Action ended 11:42:25: SetLICENSE_SERVER_ENV_VAR. Return value 0.

为什么该房产在维修时被禁止?我在初次安装时没有看到。但我仍然没有看到环境变量在哪里被删除。

在调查了什么之后"忽略不允许的属性";意思是,我看到了以下帖子,表明该属性可能没有传播到执行序列:

https://stackoverflow.com/a/39227065/4460247

通过添加属性定义并将其标记为"属性";"安全";在填充它之前,将设置属性,并且不再删除环境变量。

<Property Id="LICENSE_SERVER_ENV_VAR" Secure="yes"></Property>
<SetProperty Id="LICENSE_SERVER_ENV_VAR" Value="[%LIC_HOST]" After="LaunchConditions" Sequence="first"></SetProperty>

相关内容

  • 没有找到相关文章

最新更新