【问题标题】:Specifying command line parameters in Process.start在 Process.start 中指定命令行参数
【发布时间】:2014-08-24 18:46:08
【问题描述】:

我正在尝试用 C# 编写一个 Windows 应用程序,其中 - 用户选择一个 MSI 文件和一个实例名称,然后单击“运行安装程序”按钮.......MSI 文件将与实例一起调用名称作为参数。

所以基本上生成的命令将如下所示:

msiexec  /i "E:\Local Profile\Desktop\BranchBankingConnectorSetup.msi" MSINEINSTANCE=1 TRANSFORMS=:Instance1

问题是.....在我第一次运行安装程序并安装了分行银行连接器的实例 1 后.....如果我尝试使用实例 2 再次运行 - 程序仍然会启动实例 1 的安装程序。

这是我的代码:

System.Diagnostics.Process p  = new System.Diagnostics.Process();
p.StartInfo.FileName = "e:\\command.bat";
p.StartInfo.UseShellExecute = false;
p.Start();

文件 e:\command.bat 包含上述命令,该文件首先使用选定的实例编号更新,然后调用。

【问题讨论】:

  • 我希望您没有使用 MSINETINSTANCE,这是您帖子中的错字。

标签: c# installation windows-installer process.start


【解决方案1】:

不要使用批处理文件
您可以在 StartInfo

中传递参数
System.Diagnostics.Process p  = new System.Diagnostics.Process();
p.StartInfo.FileName = "msiexec.exe"; //You better provide a full path here
p.StatInfo.Arguments = " /i \"E:\\Local Profile\\Desktop\\BranchBankingConnectorSetup.msi\" MSINEINSTANCE=1 TRANSFORMS=:Instance1";
p.StartInfo.UseShellExecute = false;
p.Start();

【讨论】:

    【解决方案2】:

    试试这个

    p.StatInfo.Arguments = "required arguments"
    

    【讨论】:

    • 请解释 OP 的代码有什么问题以及为什么可以解决问题。
    • @BaummitAugen 我的印象是 OP 想要将命令行参数传递给 command.bat。在批处理文件中,OP 使用 %n(n 是一个数字)来获取参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 2011-01-06
    相关资源
    最近更新 更多