C# 使用Process調用外部程序中所遇到的參數問題

在使用Process.Start 調用外部程序時,除了程序的地址以外,是能夠傳遞參數的,Process.Start 也有多個重載;數組

  1         //
  2         // 摘要:
  3         //     啓動由包含進程啓動信息(例如,要啓動的進程的文件名)的參數指定的進程資源,並將該資源與新的 System.Diagnostics.Process
  4         //     組件關聯。
  5         //
  6         // 參數:
  7         //   startInfo:
  8         //     System.Diagnostics.ProcessStartInfo,包含用於啓動進程的信息(包括文件名和任何命令行參數)。
  9         //
 10         // 返回結果:
 11         //     與進程資源關聯的新的 System.Diagnostics.Process 組件,或者若是沒有啓動進程資源(例如,若是重用了現有進程),則爲 null。
 12         //
 13         // 異常:
 14         //   System.InvalidOperationException:
 15         //     在 startInfo 參數的 System.Diagnostics.ProcessStartInfo.FileName 屬性中未指定任何文件名。-
 16         //     或 - startInfo 參數的 System.Diagnostics.ProcessStartInfo.UseShellExecute 屬性爲
 17         //     true,而 System.Diagnostics.ProcessStartInfo.RedirectStandardInput、System.Diagnostics.ProcessStartInfo.RedirectStandardOutput
 18         //     或 System.Diagnostics.ProcessStartInfo.RedirectStandardError 屬性也爲 true。- 或
 19         //     -startInfo 參數的 System.Diagnostics.ProcessStartInfo.UseShellExecute 屬性爲 true,而
 20         //     System.Diagnostics.ProcessStartInfo.UserName 屬性不爲 null 或空,或者 System.Diagnostics.ProcessStartInfo.Password
 21         //     屬性不爲 null。
 22         //
 23         //   System.ArgumentNullException:
 24         //     startInfo 參數爲 null。
 25         //
 26         //   System.ComponentModel.Win32Exception:
 27         //     打開關聯的文件時發生了錯誤。
 28         //
 29         //   System.ObjectDisposedException:
 30         //     該進程對象已被釋放。
 31         public static Process Start(ProcessStartInfo startInfo);
 32         //
 33         // 摘要:
 34         //     經過指定文檔或應用程序文件的名稱來啓動進程資源,並將資源與新的 System.Diagnostics.Process 組件關聯。
 35         //
 36         // 參數:
 37         //   fileName:
 38         //     要在進程中運行的文檔或應用程序文件的名稱。
 39         //
 40         // 返回結果:
 41         //     與進程資源關聯的新的 System.Diagnostics.Process 組件,或者若是沒有啓動進程資源(例如,若是重用了現有進程),則爲 null。
 42         //
 43         // 異常:
 44         //   System.ComponentModel.Win32Exception:
 45         //     打開關聯的文件時發生了錯誤。
 46         //
 47         //   System.ObjectDisposedException:
 48         //     該進程對象已被釋放。
 49         //
 50         //   System.IO.FileNotFoundException:
 51         //     PATH 環境變量有包含引號的字符串。
 52         public static Process Start(string fileName);
 53         //
 54         // 摘要:
 55         //     經過指定應用程序的名稱和一組命令行參數來啓動一個進程資源,並將該資源與新的 System.Diagnostics.Process 組件相關聯。
 56         //
 57         // 參數:
 58         //   fileName:
 59         //     要在該進程中運行的應用程序文件的名稱。
 60         //
 61         //   arguments:
 62         //     啓動該進程時傳遞的命令行參數。
 63         //
 64         // 返回結果:
 65         //     與該進程關聯的新的 System.Diagnostics.Process 組件,或者若是沒有啓動進程資源(例如,若是重用了現有進程),則爲 null。
 66         //
 67         // 異常:
 68         //   System.InvalidOperationException:
 69         //     fileName 或 arguments 參數爲 null。
 70         //
 71         //   System.ComponentModel.Win32Exception:
 72         //     打開關聯的文件時發生了錯誤。
 73         //
 74         //   System.ObjectDisposedException:
 75         //     該進程對象已被釋放。
 76         //
 77         //   System.IO.FileNotFoundException:
 78         //     PATH 環境變量有包含引號的字符串。
 79         public static Process Start(string fileName, string arguments);
 80         //
 81         // 摘要:
 82         //     經過指定應用程序的名稱、用戶名、密碼和域來啓動一個進程資源,並將該資源與新的 System.Diagnostics.Process 組件關聯起來。
 83         //
 84         // 參數:
 85         //   fileName:
 86         //     要在該進程中運行的應用程序文件的名稱。
 87         //
 88         //   userName:
 89         //     啓動進程時使用的用戶名。
 90         //
 91         //   password:
 92         //     一個 System.Security.SecureString,它包含啓動進程時要使用的密碼。
 93         //
 94         //   domain:
 95         //     啓動進程時要使用的域。
 96         //
 97         // 返回結果:
 98         //     與進程資源關聯的新的 System.Diagnostics.Process 組件,或者若是沒有啓動進程資源(例如,若是重用了現有進程),則爲 null。
 99         //
100         // 異常:
101         //   System.InvalidOperationException:
102         //     未指定文件名。
103         //
104         //   System.ComponentModel.Win32Exception:
105         //     fileName 不是可執行 (.exe) 文件。
106         //
107         //   System.ComponentModel.Win32Exception:
108         //     打開關聯的文件時發生了錯誤。
109         //
110         //   System.ObjectDisposedException:
111         //     該進程對象已被釋放。
112         public static Process Start(string fileName, string userName, SecureString password, string domain);
113         //
114         // 摘要:
115         //     經過指定應用程序的名稱、一組命令行參數、用戶名、密碼和域來啓動一個進程資源,並將該資源與新的 System.Diagnostics.Process
116         //     組件關聯起來。
117         //
118         // 參數:
119         //   fileName:
120         //     要在該進程中運行的應用程序文件的名稱。
121         //
122         //   arguments:
123         //     啓動該進程時傳遞的命令行參數。
124         //
125         //   userName:
126         //     啓動進程時要使用的用戶名。
127         //
128         //   password:
129         //     一個 System.Security.SecureString,它包含啓動進程時要使用的密碼。
130         //
131         //   domain:
132         //     啓動進程時要使用的域。
133         //
134         // 返回結果:
135         //     與進程資源關聯的新的 System.Diagnostics.Process 組件,或者若是沒有啓動進程資源(例如,若是重用了現有進程),則爲 null。
136         //
137         // 異常:
138         //   System.InvalidOperationException:
139         //     未指定文件名。
140         //
141         //   System.ComponentModel.Win32Exception:
142         //     fileName 不是可執行 (.exe) 文件。
143         //
144         //   System.ComponentModel.Win32Exception:
145         //     打開關聯的文件時發生了錯誤。
146         //
147         //   System.ObjectDisposedException:
148         //     該進程對象已被釋放。
149         public static Process Start(string fileName, string arguments, string userName, SecureString password, string domain);
View Code

其中的arguments 參數, 是有個空格的問題的, 在外部程序接收參數的 (Winform) 是用過Main(string[] args) 。 其中args是數組 , 在StartInfo.Arguments中的參數的間隔是根據空格進行分斷的。 因此若是在傳遞的參數中是空格的,就須要 在  參數先後追加 「\"」  即:dom

1     string argument1 = "\"" + argv1 + "\"";  
2     string argument2 = "\"" + argv2 + "\"";  
3     Process process = new Process();  
4     process.StartInfo.FileName = System.Environment.CurrentDirectory + "//test.exe";  
5     process.StartInfo.Arguments = argument1 + " " + argument2;  
6     process.StartInfo.UseShellExecute = true; ;  
7     //啓動  
8     process.Start();  

ok, 這樣就能解決Process 傳遞參數的有空格的問題了。ide

相關文章
相關標籤/搜索