我有点像.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应用程序这样做
答案 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退出而不查看参数
当然,如果您能够使用给定的凭据连接到网络资源,则所有这些都是有效的。我将验证这是在正常打开的命令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 = False
(Process.StandardInput Property )。并且“退出”命令对于结束cmd
进程是必要的。