2012-08-09 113 views
0

我對編碼相當陌生,但已經構建了一些小東西。我在最後一個項目中想到的一件事是如何運行2個通常從控制檯運行的簡單命令,而是從表單應用程序中運行。簡單地說,窗體有2個按鈕,單擊一個會導致運行ipconfig,而另一個則會導致ipconfig /all。然後它將來自命令的IP信息發佈到我創建的另一個表單中作爲消息框。這很重要,因爲我正在嘗試做類似的事情,現在沒有任何工作。如何從C#Windows窗體內運行命令行代碼?

我有一個表格有一個用戶名和密碼點。在提交,我希望它本質上運行以下命令:

NET USE F: \\ALPHA\CLIENTAPPS /user:domain\%username% %password% /persistent:no 
NET USE O: \\ALPHA\USERS /user:domain\%username% %password% /persistent:no 
NET USE S: \\ALPHA\COMPANY /user:domain\%username% %password% /persistent:no 

%username%%password%從形式和域捕獲將成爲我們的實際域。

使用類似的方法來處理上述ipconfig程序,這是我想出的。然而,當我點擊提交按鈕,沒有任何反應,沒有錯誤,也沒有實際創建網絡共享:

private void btnSubmit_Click(object sender, EventArgs e) 
{ 
    string un = txtUsername.Text; 
    string pw = txtPassword.Text; 

    System.Diagnostics.ProcessStartInfo PR = new System.Diagnostics.ProcessStartInfo("cmd", @" /c net use W: \\\\ALPHA\\CLIENTAPPS /user:acsdish\\" + un + " " + pw + "/persistent:no"); 
    PR.RedirectStandardOutput = true; 
    PR.UseShellExecute = false; 
    PR.CreateNoWindow = true; 
    System.Diagnostics.Process StartPR = new System.Diagnostics.Process(); 
    StartPR.StartInfo = PR; 
    StartPR.Start(); 
} 

缺少什麼我在這裏,還是有更好的辦法?謝謝。

邁克

+0

這可能有助於:http://stackoverflow.com/questions/4807097/start-a-command-line-including-arguments-from-c-sharp – Almo 2012-08-09 21:41:09

回答

3

什麼也沒有發生,沒有錯誤,也沒有它實際上創建了網絡共享

Y你已經做了很多事情來確保。 「沒有錯誤」很容易解釋,你不要檢查的錯誤,也不讓你的用戶看到他們的方式,因爲你確保控制檯窗口不可見。如果命令失敗,它將不可見。檢查Process.ExitCode是最低要求。

下一個缺陷是您創建映射到特定用戶的共享。這很好,驅動器映射是按用戶設置的。但是你並沒有真正以該用戶身份登錄,所以你不能參見這些映射。您必須按Ctrl + Alt + Del並切換用戶帳戶。但是,這是一個失敗的原因,因爲你通過/持久:不。這意味着「用戶登錄時持續存在」。

最終的缺陷是,你把它留給另一個過程來照顧它。這總是會丟失關鍵信息,尤其是錯誤。您應該安裝Windows API函數,以便您在不知道的情況下知道,並且不會耗費巨大的週期來運行其他進程。 Pinvoke WNetAddConnection2()。

+0

您的信息是有幫助的,所以謝謝你。實際上,在我發佈和實際檢查回來之間,我發現其他地方的想法是使用API​​是更好的選擇。我確實發現這個[link] http://www.codeproject.com/Articles/6847/Map-Network-Drive-API?msg=4334657#xx4334657xx這似乎很好。我能夠使用核心和修改來適應我的需求。但是,這似乎是使用舊的WNetAddConnection。我會檢查2,看看這是否更實用,或者更確切地說,如果我可以輕鬆搞定。再次感謝。 – shelzmike 2012-08-10 14:04:09

+0

我試圖讓WNetAddConnection2()工作時遇到更多問題;然而,它與我最初詢問的具體問題無關,因此我將搜索答案,如果找不到答案,我會發布另一個與使用該函數相關的專門問題。再次感謝! – shelzmike 2012-08-10 18:06:00

4
System.Diagnostics.ProcessStartInfo PR = new System.Diagnostics.ProcessStartInfo("cmd", @" /c net use W: \\\\ALPHA\\CLIENTAPPS /user:acsdish\\" + un + " " + pw + "/persistent:no"); 

嘗試刪除 「@」,或刪除的 「\」 轉義字符

Info here(逐字字符串)

+0

偉大的信息!它始終是提供最大利益的小事情。所以,基本上,如果我使用@我不必逃避\角色(或任何真正的)?再次感謝! – shelzmike 2012-08-10 14:06:33

+0

是的,沒錯。不客氣, – dantix 2012-08-12 07:08:24