簡體   English   中英

如何從C#Windows Form中運行命令行代碼?

[英]How to run command line code from within C# Windows Form?

我對編碼還很陌生,但是已經做了一些小事情。 我在上一個項目中發現的一件事是如何運行2個簡單命令,這些命令通常是從控制台運行的,而是從表單應用程序內部運行的。 簡單地,該表單有2個按鈕,單擊其中一個會導致ipconfig運行,而另一個會導致ipconfig /all 然后它將來自命令的ip信息發布到我創建為消息框的另一種形式中。 這很重要,因為我正在嘗試做類似的事情,但現在沒有任何效果。

我有一個表單,其中包含用於用戶名的位置和用於密碼的位置。 在提交時,我希望它基本上運行以下命令:

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();
}

我在這里想念的還是有更好的方法? 謝謝。

麥克風

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

嘗試刪除“ @”或刪除轉義的“ \\”字符

此處的信息 (逐字字符串文字)

沒有任何反應,沒有錯誤,也沒有創建網絡共享

您已經做了很多工作來確保這一點。 “沒有錯誤”很容易解釋,您不檢查錯誤,也沒有給用戶提供查看錯誤的方法,因為您確保控制台窗口不可見。 如果命令失敗,則該命令將不可見。 檢查Process.ExitCode是最低要求。

下一個缺陷是您為特定用戶創建到共享的映射。 很好,驅動器映射是每個用戶的設置。 但是您實際上並未以該用戶身份登錄,因此您看不到那些映射。 您必須按Ctrl + Alt + Del並切換用戶帳戶。 但這是一個失敗的原因,因為您通過了/ persistent:no。 這意味着“在用戶登錄時保持不變”。

最終的缺陷是,您需要將它留給另一個過程來處理。 這總是會丟失關鍵信息,尤其是錯誤。 您應該調用執行此操作的Windows api函數,這樣您才能知道何時它不起作用,並且不要燃燒大量的周期來運行另一個進程。 Pinvoke WNetAddConnection2()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM