【问题标题】:Pass command line arguments from installshield installer to custom action exe将命令行参数从 installshield 安装程序传递给自定义操作 exe
【发布时间】:2016-07-18 00:23:40
【问题描述】:

我正在使用 InstallShield 安装程序 setup.exe 文件以静默方式安装我的应用程序。现在我想用一些命令行参数调用 setup.exe。并且该参数应该在我创建的要在成功执行时执行的 EXE 自定义操作中可用。如何在调用安装文件时从命令行传递数据并在我的 exe 中使用它。该 exe 是一个用 C# 编写的控制台应用程序。

【问题讨论】:

    标签: windows-installer command-line-arguments installshield custom-action installshield-le


    【解决方案1】:

    我了解这是一个基于 MSI 的项目,我假设 .exe 自定义操作是延迟执行。

    你应该做的是:

    1. 在您的安装程序中,定义 .exe 所需的一些自定义 MSI 属性(例如 ServerNameServerPort
    2. 创建“设置属性”类型的自定义操作。 Property Name 应该是运行 exe 的自定义操作的名称(例如 RunMyExe)。 Property Value 应该是您的自定义属性的串联列表,例如[ServerName];[ServerPort]。在 InstallInitialize 之后运行此自定义操作。
    3. 在您的 .exe 自定义操作 (RunMyExe) 中,将 [CustomActionData] 作为命令行传递给您的 exe 程序
    4. 让您的 exe 程序获取命令行,并将其拆分以获取所需的数据
    5. 在设置您在步骤 1 中定义的自定义属性时调用 setup.exe,例如setup.exe /v"ServerName=test-srv ServerPort=67000"

    发生的情况是,在延迟自定义操作上,您不能使用外部属性(例如从命令行提供的属性),您只能访问内部属性,例如 CustomActionData。这里的技巧是,如果存在具有操作名称的属性(上例中的 RunMyExe),则内部 CustomActionData 属性会从中获取其值。

    【讨论】:

    • 请注意,即使是延迟的 exe 自定义操作也可以引用其命令行中的任何属性。
    • 据我记忆,只有公共属性可以通过命令行传递给 MSI。所以,我想说,你的建议是行不通的。
    • "CustomActionData" 不是您可以在命令行中传递的属性。它仅存在于延迟自定义操作的上下文中,并映射到自定义操作本身的名称。
    • 你是对的。我被我们这里的一些捷径误导了。我正在用完整的解决方案更新我的原始答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多