2008-10-20 47 views
2

這個問題並沒有太多的說法,因此不容易在一行中提出質疑。 我必須執行一些我從註冊表中讀取的程序。我必須從有人拯救整個路徑和論點的領域讀書。
我一直在使用System.Diagnostics.ProcessStartInfo設置程序及其參數的名稱,但我發現了各種各樣的參數,我必須解析這些參數才能將進程可執行文件保存在一個字段中,並且其參數在其他。你如何運行你不知道參數開始的程序?

有沒有辦法只是執行整個字符串?

+1

有人可以請進一步解釋這個問題。自從他的回答被接受以後,deadcat明白了。他想從註冊表中讀取什麼內容?程序,程序名稱,其他? – 2008-10-21 13:50:05

回答

6

我已經解決了這個問題,就像上面的海報一樣,使用cmd.exe和進程啓動信息。

Process myProcess = New Process; 
myProcess.StartInfo.FileName = "cmd.exe"; 
myProcess.StartInfo.Arguments = "/C " + cmd; 
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
myProcess.StartInfo.CreateNoWindow = True; 
myProcess.Start(); 
myProcess.WaitForExit(); 
myProcess.Close(); 

cmd/c執行命令,然後終止。 WaitForExit會在運行時間過長時終止進程。

0

實際上有幾種。

  1. 你可以用/ C [你的命令行]作爲參數調用cmd.exe。這會導致cmd.exe處理您的命令,然後退出。
  2. 您可以將命令寫入批處理文件並啓動該文件。

當然,您現在正在採取的方法,即解析命令行。

+0

通過選項1,您的意思是以cmd.exe作爲文件名並以'/ c '作爲參數啓動ProcessInfo? – sebagomez 2008-10-20 23:13:09

+0

我認爲你的意思是ProcessStartInfo,但是,填入並將其傳遞給Process.Start。您可能希望將其UseShellExecute設置爲false以在後臺運行它。 如果您不需要在命令運行時隱藏CMD.EXE窗口,則可以使用Process.Start(「cmd.exe」,「/ c」+ myargs)。 – 2008-10-21 01:01:12

0

未設置'UseShellExecute'時,System.Diagnostics.Process調用CreateProcessCreateProcessAsUser實際啓動程序(如果指定用戶/域/密碼,則使用第二個程序)。這兩個調用都可以將命令和文件作爲單個參數。從MSDN:

lpApplicationName參數可以是 NULL。在這種情況下,模塊名稱 必須是 lpCommandLine字符串中的第一個白色 空格分隔的令牌。 ...

lpApplication名稱映射到ProcessStartInfo.Filename和lpCommandLine映射到參數。所以,你應該保持剛剛去:

var processStartInfo = new ProcessStartInfo() 
{ 
    UseShellExecute = false, 
    Arguments = cmd 
}; 
Process.Start(processStartInfo); 
相關問題