我正在使用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文件),选择“安装”,然后在维护对话框中选择“修复”选项,我将再次遍历向导。页面正确地提取许可服务器信息,就像初次安装时一样,但是在完成修复之后,环境变量将从系统中删除。
我试过:
将“Sequence”在Component
中使用的许可证服务器
这些都不起作用。
有人知道为什么通过MaintenanceDialog进行修复会导致环境变量的删除吗?谢谢。
编辑:添加详细的日志记录后,修复输出显示以下似乎相关的内容:
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 Files\Schlumberger\Petrel 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.为什么在修理时不允许使用该房产?我在最初安装的时候没看到这个。但是我仍然不知道环境变量在哪里被删除。
发布于 2022-09-28 18:09:23
在研究了“忽略不允许的属性”意味着什么之后,我看到了下面的帖子,表明该属性很可能没有传播到执行序列:
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>https://stackoverflow.com/questions/73885415
复制相似问题