【问题标题】:How to prevent to log execution steps of Custom Action in InstallShield?如何防止在 InstallShield 中记录自定义操作的执行步骤?
【发布时间】:2023-03-24 09:59:01
【问题描述】:

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

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

【问题讨论】:

    标签: logging installshield custom-action


    【解决方案1】:

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

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

    • 使用MsiHiddenProperties 明确阻止记录特定属性的值。请注意,有几个操作会格式化字符串,这样做会丢失包含结果值的属性,因此不要尊重MsiHiddenProperties

    • 例如,使用自定义操作类型标志 0x2000 / 8192 Custom Action Hidden Target Option 来防止记录延迟操作的 CustomActionData 属性的值。同样,这不会传播到基于自定义操作从该属性中提取的值的任何进一步的日志记录。请注意,您必须将值 8192 添加(技术上按位或)到 CustomAction 表的 Type 列中的现有值;该值的其他位也包含重要信息,例如它的base type 和它的execution options

      (请参阅链接的Preventing Confidential Information from Being Written into the Log File 了解更多关于此行的建议,这里没有任何帮助。)

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

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

    【讨论】:

    • 我对 CustomActionData 也有疑问。因此,我尝试了您的建议并将 CusstomAction 类型值设置为 8192。但我收到“错误 2717.Bad action condition or error calling custom action”的错误
    • 对不起,我没听懂。在哪里添加这个 8192 值?如何做到这一点?
    • 好酷!!它适用于延迟 CA。但我的目标仍然是隐藏 IsXMLInstall CustomAction 的日志...您还有其他解决方案/解决方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 2016-11-04
    • 2014-11-14
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多