如何在 MSI 的日志中隐藏 customactiondata 的值?

How to hide the value of customactiondata in logs of MSI?

我有一个延迟的自定义操作,它使用 Customactiondata 获取 属性,它包含不应在日志中显示的密码值。

使用的打包工具:WIX

用 C++ 编写的自定义操作

我已经尝试了以下解决方法,但似乎没有任何效果。

  1. 将 属性 和 CA 名称标记为隐藏

  2. Hidetarget = CA 定义中的是

需要做什么?

代码:

<CustomAction Id="CASETLOGINFORRCSERVICES" Return="check" HideTarget="yes" Execute="deferred" Impersonate="no" TerminalServerAware="no" DllEntry="SetLoginForRCServices" BinaryKey="CA_Dll" />

日志:

MSI (s) (7C:CC) [18:35:39:011]: Executing op: CustomActionSchedule(Action=CASETLOGINFORRCSERVICES,ActionType=3073,Source=BinaryData,Target=SetLoginForRCServices,CustomActionData=Deps@@@151232323)
MSI (s) (7C:B0) [18:35:39:038]: Invoking remote custom action. DLL: C:\WINDOWS\Installer\MSIEB69.tmp, Entrypoint: SetLoginForRCServices

将 HideTarget="Yes" 添加到自定义操作。

MsiHiddenProperties: 有一个 属性 你可以设置隐藏 属性 值不被写入日志:MsiHiddenProperties property(其中有进一步的链接指向有关防止 MSI 中的机密信息的更多信息)。

自定义操作: 为自定义操作设置属性HideTarget="yes"将为您设置以上 属性 值。但是,此功能似乎并未隐藏日志中 属性 table 中 hard-code 的任何值 - 因此,如果您在 [=] 中为 属性 设置实际值94=] table 您还需要将 属性 本身设置为隐藏(您可以通过编程方式或通过 GUI 设置一个值,而无需在 属性 table 中设置)。以下是样本:

HideTarget="Yes":

<CustomAction Id="ReadProperyDeferred" HideTarget="yes" ... />

Property Hidden="yes":

<Property Id="MYPROPERTY" Hidden="yes" Secure="yes">Text</Property>

示例:此处示例 WiX 源代码:https://github.com/glytzhkof/WiXDeferredModeSample.

这是延迟模式的另一个示例 - 它使用 DTF class CustomActionData 轻松将属性发送到延迟模式:https://github.com/glytzhkof/WiXDeferredModeSampleDTF

记得尽可能避免自定义操作:

敏感信息:这是关于防止敏感或不需要的信息进入您的 MSI 的答案:


代码摘录: 更喜欢打开上面的示例。但是,这是延迟模式自定义操作从 set-property 自定义操作检索数据所需的 WiX 构造的“压缩”序列:

<Property Id="MYPROPERTY" Hidden="yes" Secure="yes">Send this text to deferred mode</Property>
<Binary Id="CustomActions" SourceFile="$(var.CustomActionSample.TargetDir)$(var.CustomActionSample.TargetName).CA.dll" />

<CustomAction Id="SetProperty" Return="check" Property="ReadProperyDeferred" Value="[MYPROPERTY]" />
<CustomAction Id="ReadProperyDeferred" HideTarget="yes" BinaryKey="CustomActions" Execute="deferred" DllEntry="TestCustomAction" />

<InstallExecuteSequence>
  <Custom Action='SetProperty' Before='InstallInitialize'></Custom>
  <Custom Action='ReadProperyDeferred' Before='InstallFinalize'></Custom>
</InstallExecuteSequence>

链接:

  • How can I automate testing an MSI is installable with UAC?