您仍然可以在延迟自定义操作期间从会话对象中读取属性,您只需要定义在命令行中传入的公共属性Secure="yes"
,然后进行第二个自定义操作,该操作在您的延迟自定义操作之前运行,以设置您的 CustomActionData 属性延迟操作,以便它可以在执行期间读取公共属性的值。
你需要定义这样的东西
<Property Id="AUTHTOKEN" Secure="yes" Hidden="yes" />
<CustomAction Id="AuthenticateDownload" BinaryKey="CustomActionsDLL" DllEntry="Download" Execute="Deferred" Impersonate="no" />
<CustomAction Id="SetAuthenticateDownload" Property="AuthenticateDownload" Value="AUTHTOKEN=[AUTHTOKEN];INSTALLDIR=[INSTALLDIR]" />
<InstallExecuteSequence>
<Custom Action="SetAuthenticateDownload" Before="AuthenticateDownload">NOT Installed AND NOT UPGRADINGPRODUCTCODE AND NOT REMOVE~="ALL"</Custom>
<Custom Action="AuthenticateDownload" Before="InstallFiles">NOT Installed AND NOT UPGRADINGPRODUCTCODE AND NOT REMOVE~="ALL"</Custom>
</InstallExecuteSequence>
并访问您现在需要使用的自定义操作中传入的属性值
string AuthToken = session.CustomActionData["AUTHTOKEN"];
string InstallDir = session.CustomActionData["INSTALLDIR"];
... try download to installdir ...
将属性传递给延迟操作需要考虑的几件事是,您必须使用“设置”操作,该操作使用要使用的自定义操作 ID 的确切名称设置属性。然后使用逗号- PropertyName=PropertyValue 的分隔列表,其格式设置意味着您可以使用 [] 中的安装程序属性作为值。
自定义操作的条件将让此自定义操作仅在您在计算机上安装新产品(而不是升级或删除)时运行。如果您只想在第一次安装而不是升级时运行该操作,只需AND NOT WIX_UPGRADE_DETECTED
在其中添加一个。
不要忘记添加相反的自定义操作以在卸载时删除这些文件,这样您就不会留下任何东西。