从vb.net app调用windows cmd时命令不执行

时间:2013-08-21 11:45:07

标签: .net vb.net system.diagnostics

我有点像.NET菜鸟。我一直在努力寻找通过vb.net应用程序执行命令的方法,我发现this thread 所以我想出来的,将驱动器映射到网络上的另一台服务器是这样的;

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应用程序这样做

2 个答案:

答案 0 :(得分: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类有一个构造函数,它接受两个参数,即要启动的程序文件和传递给此进程的参数。

然而,CMD.exe在命令行上传递标志/C是非常重要的,否则将忽略参数并且cmd.exe退出而不查看参数

More info on CMD flags

当然,如果您能够使用给定的凭据连接到网络资源,则所有这些都是有效的。我将验证这是在正常打开的命令shell上尝试相同命令的第一步。

答案 1 :(得分: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进程是必要的。