1

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

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

4

2 回答 2

3

您的代码需要修改

    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进程所必需的。

于 2013-08-21T12:43:00.537 回答
2

将您的代码更改为

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 退出而不查看参数

有关 CMD 标志的更多信息

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

于 2013-08-21T12:35:44.287 回答