我正在制作一个安装程序,它必须配置它安装的网络服务。它动态生成属性,用于保存 UI 序列中从用户收集的数据、安装服务并设置参数。
SetParams CA 使用 UI 序列中生成的动态属性。为了访问延迟 CA 中的数据,我创建了一个即时 CA,它动态提取会话数据并将其放入 CustomActionData 中。
<CustomAction Id='SaveParams' BinaryKey='Setup.CustomAction' DllEntry='SaveParameters' Execute='immediate' Return='check'/>
<CustomAction Id='SetParams' BinaryKey='Setup.CustomAction' DllEntry='SetParameters' Execute='deferred' Impersonate='no' Return='check' />
<Custom Action='SaveParams' Before='SetParams'><![CDATA[REMOVE <> "ALL"]]></Custom>
<Custom Action='SetParams' Before='InstallFinalize'><![CDATA[REMOVE <> "ALL"]]></Custom>
以下是自定义操作中 SaveParameters 方法的部分
customActionData.Append(string.Format(CultureInfo.InvariantCulture, "{0}={1};", propertyName, session[propertyName]));
这个方法有效!
从管理 cmd 启动时,会话 [propertyName] 返回正确的值,但是当我从非提升的 cmd 提示符运行安装程序更改时,我无法访问直接 CA 中的属性值 - 会话 [propertyName] 返回空字符串?!
我可以访问 wxs 文件中定义的(静态)属性
<Property Id="INSTALL" Secure="yes" />
但不是我在 UI 序列中的其他一些立即自定义操作中添加的,如下所示
session[property] = "VALUE"; //eq. property = DATABASENAME
有谁知道为什么我无法读取动态公共财产价值?
注:从this https://stackoverflow.com/questions/9096452/wix-installer-how-to-run-change-with-administrative-privileges-when-run-from-u问题。