由于某种原因,我要求使用命令行提供的参数更新配置文件,文件没有更新,所以我在c#中编写了一个由msiexec启动的小实用程序。目的是获取命令行参数到这个应用程序,以便它打开配置文件并在安装过程中更新它。
我的应用程序执行正常,但在尝试读取父进程(msiexec)命令行参数时,我得到类似C:\windows\msiexec /V
的内容,而不是我在msiexec命令行中指定的内容(我甚至没有使用{ {1}})
关于可能出现什么问题的任何想法?如果你有更好的方法来解决这个问题,请建议。
感谢。
更新
很抱歉让我感到困惑,我正在使用WiX安装程序并在命令行上启动WiX生成的.msi,如下所示。
/V
Wix安装程序脚本中定义了 C:\> msiexec /I foo.msi ARG1="v1" ARG2="v2"
和ARG1
。
我正在看的是一种通过msiexec启动的小应用程序访问命令行参数ARG2
,ARG1="v1"
的方法(该应用程序在Wix安装程序脚本中指定为自定义动作)。
理想情况下,当我使用ARG2="V"
(同时尝试xmlFile
)时,我的WiX安装程序脚本应该能够使用xmlConfig
,v1
更新我的配置文件,但是没有发生所以编写了一个应该能够阅读v2
&的应用程序。 v1
并写入配置文件。
使用v2
我收到以下错误:
ExecXmlFile:错误0x8007006e:无法加载XML文件:错误25531.无法打开XML文件,系统错误:-2147024786 MSI(s)(E4!54)[18:11:36:714]:产品: - - 错误25531.无法打开XML文件,系统错误:-2147024786 -
没有得到任何有意义的信息。我使用msiexec参数xmlFile
来生成日志记录。
日志摘录:
实际上/l*v
应该满足我的要求,但在使用时会出现以下错误。对此的任何帮助将不胜感激。
xmlFile
CustomAction 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
返回实际的错误代码1603(请注意,如果在沙箱中发生翻译,这可能不是100%准确)
答案 0 :(得分:1)
您是否将参数作为MSI属性传递?如果是,那么您可以从MSI数据库中读取它们。检查一下:
http://www.alteridem.net/2008/05/20/read-properties-from-an-msi-file/
我猜您正在为Config文件设置特定于环境的应用程序属性?如果是这样,为什么不在配置文件中定义所有属性并使应用程序足够智能以读取正确的属性(通过检查环境)?我会这样做的。
以上评论仅基于您提供的有限信息。你有自己的理由这样做:)
答案 1 :(得分:1)
在我看来,您需要在安装过程中添加CustomAction。 根据您的要求,您可能需要两者或只需一份。
我相信这将允许您在安装期间更改配置文件的值。您可以找到CustomActions及其类型here的精彩介绍。看看Type 2 CustomAction。
在“答案”部分编辑以下问题:
CA计划在安装过程中何时启动? 你有安装的日志文件吗?
重新编辑
如果没有代码或有关安装过程的更多信息,我无法提供更多帮助。
有用的信息将是: