2013-08-21 196 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