2013-05-06 52 views
1

這整個週末一直在擾亂我......我有點新,所以請耐心等待。無法獲取多個命令行參數在Windows窗體中運行

我想獲得這個窗體窗體按鈕來執行我傳遞給它的命令行參數,但它不工作。它只是停留在工作目錄...

private void convert_Click(object sender, EventArgs e) 
{ 
     string safeFile = @textBox2.Text; 
     string safePass = @textBox3.Text; 
     string safeDir = @textBox4.Text; 

     Process test = new Process(); 
     test.StartInfo.FileName = "cmd.exe"; 
     test.StartInfo.UseShellExecute = false; 
     test.StartInfo.WorkingDirectory = @safeDir; 
     test.StartInfo.Arguments = "sqltosafe.exe" + @safeFile + "-password" + @safePass; 
     test.StartInfo.RedirectStandardOutput = true; 
     test.Start(); 
     textBox1.Text = test.StandardOutput.ReadToEnd(); 
    } 

應用程序應該:

1)其中的「轉換」按鈕clicke,它會搶在.exe文件所在的位置。

2)執行在與所述命令行參數諸如.EXE:

C:\ SafetoSQL \ SafetoSQL.exe(.safe文件的位置)-password(密碼)

I」我一直在搜索整個網絡,弄清楚如何讓它工作,但無濟於事。我認爲這可能是一個簡單的解決方案,也許我是一個N00B在這個,但我正在努力變得更好。

謝謝大家的閱讀,我希望你們都能提供一些關於我應該在哪裏尋找的信息。

+2

當您將WorkingDirectory更改爲指向您發佈參數的文件夾時會發生什麼? – 2013-05-06 01:57:19

+0

它會轉到那個.exe所在的文件夾(這很好),但它不會執行「test.StartInfo.Arguments」中的參數 – jhonny 2013-05-06 02:11:24

+0

當您調用的進程被調用時,您將引用該命令線參數。確保參數不一起運行,即您沒有像command =「run.exe」c:\ somefile.txt-password「」password「的情況。 – 2013-05-06 15:44:59

回答

0

看起來您無法爲命令行參數添加空格和引號。

test.StartInfo.Arguments = "sqltosafe.exe" + @safeFile + "-password" + @safePass; 

應該是:

test.StartInfo.Arguments = "sqltosafe.exe \"" + safeFile + "\" -password \"" + safePass + "\""; 

或使用格式字符串而不是串聯,這是清晰的,並且不產生中間字符串:

test.StartInfo.Arguments = String.Format("sqltosafe.exe \"{0}\" -password \"{1}\"", safeFile, safePass); 

您需要的報價的原因標記是用戶提供的值可能包含空格和空格來刪除命令行參數。

您還應該驗證用戶提供的字符串,以確保至少它們不是空的。