如何防止在 InstallShield 中记录自定义操作的执行步骤?

How to prevent to log execution steps of Custom Action in InstallShield?

我使用 InstallShield 制作了一个安装程序。我在里面写了一些自定义操作。
安装此安装程序时,这些 CustomActions 的日志(执行步骤)会打印在日志文件中。但我想防止将一些 CustomActions 的数据(执行步骤)记录到日志文件中。我不想让用户知道自定义操作出于安全目的到底在做什么。

那么我如何才能阻止某些 CustmAction 将它们的执行步骤记录到日志文件中呢?我想阻止整个 CustomAction 的日志。
或者我们可以在 InstallShield 中安装时暂停日志记录一段时间吗?

这会提出一个有趣的功能请求!也许可以教导 InstallShield 尊重(理论上的)ISSuppressLogging 属性 的值,该值在立即操作时或计划延迟操作时是非空的。但这现在不可用,并且需要对 InstallShield 的自定义操作进行基于代码的更改。

回到现在。 InstallShield 不提供任何选项来抑制其日志记录语句,至少在它明确尝试支持的一些场景之外是这样,因此您剩下的选项可能无法满足您的需求:

  • 使用 MsiHiddenProperties 明确阻止记录特定 属性 的值。请注意,有几个操作会格式化字符串,并且在这样做时会忘记包含结果值的属性,因此请不要遵守 MsiHiddenProperties.

  • 使用自定义动作类型标志0x2000 / 8192 Custom Action Hidden Target Option to prevent logging the value of a deferred action's CustomActionData property, for example. Again this does not propagate to any further logging based on values the custom action extracts from this property. Note that you must add (technically bitwise OR) the value 8192 to the existing value in the Type column of the CustomAction table; the other bits of that value contain important information as well, such as its base type and its execution options.

    (请参阅链接 Preventing Confidential Information from Being Written into the Log File 以获取更多建议,其中 none 将对此处有所帮助。)

  • 运行 来自 ControlEvent 的自定义操作。这个有点疯狂,对于大多数用途来说绝对不切实际,因为您可能希望从修改系统的项目中隐藏日志记录详细信息并且需要 运行 提升权限。但如果情况并非如此,DoAction control event 中的一个怪癖会阻止所有日志消息进入日志。

作为一般性评论,我经常看到此请求涉及将字符串以纯文本形式存储在另一个文件中的自定义操作。在那些情况下,我非常不清楚为什么必须隐藏日志文件的字符串副本。如果数据特别敏感,最好以某种方式加密它的值,并只存储加密后的值。然后,也许在 MsiHiddenProperties 和项目符号中描述的隐藏目标标志的帮助下,日志将仅包含加密值。