C# 在Process.start中指定命令行参数

C# 在Process.start中指定命令行参数,c#,installation,windows-installer,process.start,C#,Installation,Windows Installer,Process.start,我正在尝试用C#编写一个windows应用程序,其中-用户选择一个MSI文件和一个实例名,然后单击“运行安装程序”按钮……。MSI文件将以实例名作为参数调用 因此,生成的命令基本上如下所示: msiexec /i "E:\Local Profile\Desktop\BranchBankingConnectorSetup.msi" MSINEINSTANCE=1 TRANSFORMS=:Instance1 问题是….在我第一次运行安装程序并且安装了Branch Banking Connecto

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

因此,生成的命令基本上如下所示:

msiexec  /i "E:\Local Profile\Desktop\BranchBankingConnectorSetup.msi" MSINEINSTANCE=1 TRANSFORMS=:Instance1
问题是….在我第一次运行安装程序并且安装了Branch Banking Connectors的实例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包含上述命令,该文件首先用所选实例号更新,然后调用。

不要使用批处理文件
您可以在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();
试试这个

p.StatInfo.Arguments = "required arguments"

请解释OP的代码有什么问题,以及为什么这可以解决问题。@BaummitAugen我的印象是OP想要将命令行参数传递给command.bat。在批处理文件中,OP使用%n(n是一个数字)获取参数。我希望您没有使用MsineInstance,这是您文章中的一个输入错误。