通过C#进程使用cmd.exe的多个参数

时间:2012-03-21 22:42:34

标签: c# process cmd esri

我尝试使用C#程序中的参数调用esriRegAsm.exe。 目的是注册一个Dll。因此,我通常使用Dll作为参数调用esriRegAsm.exe以及一些其他参数(/ p:Desktop / s)。如果我将其键入cmd.exe,这可以正常工作。不知怎的,我认为进程只将第一个字符串发送到cmd而不是整个参数列表,但我需要路径中的空格字符“”。 为了调试我添加了一个消息框,字符串似乎没问题。

反斜杠或双反斜杠似乎并不重要。

        string targetDir = this.Context.Parameters["targ"];
        string programFilesFolder = this.Context.Parameters["proFiles"];

        System.Diagnostics.Process process = new System.Diagnostics.Process();
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        startInfo.FileName = "cmd.exe";
        startInfo.Arguments = "/C \"" + programFilesFolder + "Common Files\\\\ArcGIS\\\\bin\\\\esriRegAsm.exe\" " + "\"" + targetDir + "RArcGISTest.dll\"  /p:Desktop /s";
        MessageBox.Show("/C \"" + programFilesFolder + "Common Files\\\\ArcGIS\\\\bin\\\\esriRegAsm.exe\" " + "\"" + targetDir + "RArcGISTest.dll\"  /p:Desktop /s");
        process.StartInfo = startInfo;
        process.Start();

因为我无法附上消息框的图片......输出是:

/ C“C:\ Program Files(x86)\ Common Files \ ArcGIS \ bin \ esriRegAsm.exe”“C:\ install \ RArcGISTest.dll”/ p:Desktop / s“

1 个答案:

答案 0 :(得分:1)

为什么要双重逃避,为什么要通过cmd.exe进行路由?只需直接执行该过程:

string targetDir = this.Context.Parameters["targ"];
string programFilesFolder = this.Context.Parameters["proFiles"];

Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = Path.Combine(programFilesFolder, @"Common Files\ArcGIS\bin\esriRegAsm.exe");
startInfo.Arguments = "\"" + Path.Combine(targetDir, "RArcGISTest.dll") + "\" /p:Desktop /s";
process.StartInfo = startInfo;
process.Start();