【问题标题】:passing msiexec command line params to a child process started by msiexec将 msiexec 命令行参数传递给 msiexec 启动的子进程
【发布时间】:2012-11-11 17:28:45
【问题描述】:

出于某种原因,我需要使用命令行提供的参数更新配置文件,该文件没有被更新,所以我用 c# 编写了一个小型实用程序应用程序,由 msiexec 启动。目的是获取此应用程序的命令行参数,以便在安装过程中打开配置文件并更新它。

我的应用程序执行得很好,但是在尝试读取父进程 (msiexec) 命令行参数时,我得到类似 C:\windows\msiexec /V 的东西,而不是我在 msiexec 命令行上指定的东西(我什至没有使用 /V )

关于可能是什么问题的任何想法?如果您有更好的方法来处理这个问题,请提出建议。

谢谢。

更新:
很抱歉造成混淆,我使用的是 WiX 安装程序,并在命令行上启动 WiX 生成的 .msi,例如如下所示。

C:\> msiexec /I foo.msi ARG1="v1" ARG2="v2" 

ARG1ARG2 在 Wix 安装程序脚本中定义。

我正在查看的是一种通过将由 msiexec 启动的小型应用程序访问命令行参数ARG1="v1"ARG2="V" 的方法(该应用程序在 Wix 安装程序脚本中指定为自定义操作)。

理想情况下,当我使用 xmlFile(也尝试过 xmlConfig)时,我的 WiX 安装程序脚本应该能够使用 v1v2 更新我的配置文件,但它没有发生,所以编写了一个应该能够读取v1 & v2 并写入配置文件。

使用xmlFile 我得到以下错误:

ExecXmlFile:错误 0x8007006e:无法加载 XML 文件:错误 25531。无法打开 XML 文件,系统错误:-2147024786 MSI (s) (E4!54) [18:11:36:714]:产品:- - 错误 25531。无法打开 XML 文件,系统错误:-2147024786 –

没有得到任何有意义的信息。我使用 msiexec 参数/l*v 来生成日志记录。


日志摘录:

实际上xmlFile 应该满足我的要求,但我在使用它时收到以下错误。对此的任何帮助将不胜感激。

MSI (s) (E4:00) [18:11:32:110]: Executing op: ActionStart(Name=ExecXmlFile,,) Action 18:11:32: ExecXmlFile.
MSI (s) (E4:00) [18:11:32:111]: Executing op: CustomActionSchedule(Action=ExecXmlFile,ActionType=3073,Source=BinaryData,Target=ExecXmlFile,CustomActionData=1030//cloudRecognition/connectiontype130//cloudRecognition/connectionaddress192.168.128.59;192.168.128.261030//cloudRecognition/connectionport50001;50001)
MSI (s) (E4:DC) [18:11:32:113]: Invoking remote custom action. DLL: C:\Windows\Installer\MSIA419.tmp, Entrypoint: ExecXmlFile
MSI (s) (E4:EC) [18:11:32:113]: Generating random cookie.
MSI (s) (E4:EC) [18:11:32:115]: Created Custom Action Server with PID 10104 (0x2778).
MSI (s) (E4:68) [18:11:32:402]: Running as a service.
MSI (s) (E4:68) [18:11:32:403]: Hello, I'm your 32bit Elevated custom action server.
ExecXmlFile:  Error 0x8007006e: failed to load XML file:
Error 25531. Failed to open XML file , system error: -2147024786
MSI (s) (E4!54) [18:11:36:714]: Product:  -- Error 25531. Failed to open XML file , system error: -2147024786

CustomAction ExecXmlFile 返回实际错误代码 1603(请注意,如果翻译发生在沙箱内,这可能不是 100% 准确)

【问题讨论】:

    标签: installation wix command-line-arguments


    【解决方案1】:

    您是否将参数作为 MSI 属性传递?如果是,那么您可以从 MSI 数据库中读取它们。检查这个:

    http://www.alteridem.net/2008/05/20/read-properties-from-an-msi-file/

    我猜您是在为配置文件设置环境特定的应用程序属性?如果是这样,为什么不在配置文件中定义所有属性并使应用程序足够智能以读取正确的属性(通过检查环境)?我会那样做。

    以上 cmets 仅基于您提供的有限信息。你会有自己的理由这样做:)

    【讨论】:

    • 对不起,我使用的是 WiX 安装程序,我在命令行上启动了 WiX 生成的 .msi,例如。
    • 有关更多详细信息,请参阅原始问题的更新,如果您需要更多详细信息,请告诉我。感谢您的帮助
    • 对不起,我应该把它贴在这里,但没有字符允许我把它作为我自己问题的答案发布。请看一下,任何帮助将不胜感激。谢谢。
    【解决方案2】:

    在我看来,您需要在安装过程中添加一个 CustomAction。 根据您的要求,您可能需要两者或只需要一个。

    1. 要更新配置文件,您可以使用XmlFile CustomAction,更改修改任何 XML 文件。
    2. 启动Quiet ExecutionCustomAction

    我相信这将允许您在安装期间更改配置文件的值。您可以找到对 CustomActions 及其类型的精彩介绍here。看看类型 2 CustomAction。

     
    编辑回答部分中的以下问题:

    CA 计划在安装过程中何时启动?
    您有安装日志文件吗?

     
    重新编辑

    没有代码或有关安装过程的更多信息,我真的无能为力。

    有用的信息是:

    1. 您的 CA 在安装顺序中的哪个位置启动?
    2. 您使用什么 WiX Element 来更改文件中的值。
    3. 您是否尝试创建一个仅执行您遇到问题的部分的安装程序,以隔离行为。

    【讨论】:

    • CA 计划在安装后启动。
    • 是的,我从日志文件中复制了一份。即自定义操作服务器。 ExecXmlFile:错误 0x8007006e:无法加载 XML 文件:错误 25531。无法打开 XML 文件,系统错误:-2147024786 MSI (s) (E4!54) [18:11:36:714]:产品:- 错误 25531 . XML文件打开失败,系统错误:-2147024786
    • 您确定文件已被复制?
    • 您是否有权限执行该操作
    • 您的意思是我要更新的 xml 文件?如果是这样,则该文件已经可用,并且升级不会触及该文件,因为我使用了 NeverOverwrite="yes"。我所有的实验都是在通过命令行安装的升级过程中进行的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    相关资源
    最近更新 更多