2013-08-21 247 views
0

我是一個.NET noob。我一直在努力尋找一種通過vb.net應用程序執行命令的方法,並且我發現this thread 所以我想出了將驅動器映射到網絡上的另一臺服務器的原因。從vb.net應用程序調用windows cmd時,命令不執行

Dim application As New ProcessStartInfo("cmd.exe") 
Dim process As Process 
process = process.Start(application) 
Dim command As String = "net use x: \\webtest01\c$ /USER:daylight\robbery TakeItNGo" 'all fake obviously 
process.StandardInput.WriteLine(command) 
process.WaitForExit() 
process.Close() 

但是當我運行的應用程序,它位於約30秒,然後我得到的Windows命令控制檯設置爲E:\>工作目錄彈出

有人可以告訴我,我做錯了什麼,請,這是我第一次從vb.net應用

回答

1

您的代碼需要修改

Dim application As New ProcessStartInfo("cmd.exe") With 
         {.RedirectStandardInput = True, .UseShellExecute = False} 
    Dim process As New Process 
    process = process.Start(application) 
    Dim command As String = "net use x: \\webtest01\c$ /USER:daylight\robbery TakeItNGo" _ 
      & vbCrLf & "exit" 
    process.StandardInput.WriteLine(command) 
    process.WaitForExit() 
    process.Close() 

要使用標準輸入您需要.RedirectStandardInput = True, .UseShellExecute = FalseProcess.StandardInput Property)。並且「退出」命令對於結束cmd進程是必要的。

+0

甜!便祕時像熱水一樣工作! – pythonian29033

1
這樣

更改您的代碼

Dim command As String = "/C net use x: \\webtest01\c$ /USER:daylight\robbery TakeItNGo" 
Dim application As New ProcessStartInfo("cmd.exe", command) 
Dim process = process.Start(application) 
process.WaitForExit() 
process.Close() 

ProcessStartInfo CLA ss有一個構造函數,它有兩個參數,要啓動的程序文件以及傳遞給此進程的參數。

然而,它是用的CMD.exe至關重要傳遞標誌/C命令行,否則參數將被忽略,cmd.exe的退出上​​不看參數

More info on CMD flags

中如果您能夠使用所提供的憑證連接到網絡資源,則所有這些都是有效的。我會驗證這是第一步在正常打開的命令shell上嘗試相同的命令。

+1

已經檢查到uname和pwd的命令有效。 我的智能感是在你回答的代碼中強調第三行,應該「process.Start(應用程序)」是「Process.Start(應用程序)」還是應該在聲明中實例化過程對象? – pythonian29033