是否从vb.net沙盒调用CMD?
我一直在尝试调用cmd来运行一个命令并从中获得输出——特别是“queryuser/server:servername”命令,并且发现了很多讨论如何运行它的帖子。但当我运行它时,它似乎适用于大多数命令(ipconfig、ping、tracert),但不适用于我的查询用户命令。有趣的是,下面的代码似乎适用于大多数命令,但不是这个命令是否从vb.net沙盒调用CMD?,vb.net,windows,batch-file,cmd,process,Vb.net,Windows,Batch File,Cmd,Process,我一直在尝试调用cmd来运行一个命令并从中获得输出——特别是“queryuser/server:servername”命令,并且发现了很多讨论如何运行它的帖子。但当我运行它时,它似乎适用于大多数命令(ipconfig、ping、tracert),但不适用于我的查询用户命令。有趣的是,下面的代码似乎适用于大多数命令,但不是这个命令 Process.Start("cmd", "/c query user /server:PCNAME") 我还尝试创建一个批处理文件并运行它 Dim currentd
Process.Start("cmd", "/c query user /server:PCNAME")
我还尝试创建一个批处理文件并运行它
Dim currentdir As String = Directory.GetCurrentDirectory
Dim server As String = txt_target_server.Text
Dim cmdline As String = "query user /server:" & server & " > tmpidlvw.txt"
IO.File.WriteAllText("tempbat.bat", "@echo off" & vbNewLine & cmdline)
Process.Start("tempbat.bat")
Dim currentreader As StreamReader
Dim currentfile As String = currentdir & "\tmpidlvw.txt"
If System.IO.File.Exists(currentfile) Then
currentreader = New StreamReader(currentfile)
Dim usercount As Integer = 0
Dim userarray(100) As String
Do While Not currentreader.EndOfStream
Dim tempstring As String = currentreader.ReadLine
MsgBox(tempstring)
userarray(usercount) = tempstring
usercount += 1
Loop
currentreader.Close()
For count As Integer = 1 To usercount
MsgBox(userarray(count))
Next
Else
MsgBox(currentfile)
End If
这也失败了。我发现,如果我正常运行它,它创建的批处理文件工作正常(代码生成的批处理文件正常)。我已将其隔离,以确保process.start(cmd.exe)的运行方式与普通cmd不同。
例如,如果我运行process.start(cmd.exe),然后执行以下操作
cd c:\windows\system32
dir | findstr query
14/07/09 02:14 AM 66,048 driverquery.exe
14/07/09 02:15 AM 395,776 dsquery.dll
08/07/15 10:48 PM 1,549,312 tquery.dll
我得到以下信息
cd c:\windows\system32
dir | findstr query
14/07/09 02:14 AM 66,048 driverquery.exe
14/07/09 02:15 AM 395,776 dsquery.dll
08/07/15 10:48 PM 1,549,312 tquery.dll
如果在正常命令提示符下运行完全相同的命令,则输出如下
14/07/09 02:39 AM 96,256 driverquery.exe
14/07/09 02:40 AM 429,056 dsquery.dll
21/11/10 04:24 AM 16,384 query.exe
08/07/15 10:48 PM 2,315,776 tquery.dll
我相信这就是它失败的原因-调用的cmd没有“看到”与普通命令提示符相同的目录,也看不到query.exe文件
有人知道我能做些什么来让它工作吗?我已经验证了如果我在另一台机器上运行我的代码,并已关闭vmware调试、防病毒、autosandbox等,则会发生这种情况。@MrGadget我也尝试使用此方法,但得到了相同的结果-“query”未被识别为有效的内部或外部命令,可操作的程序或批处理文件。提供完整路径?@MrGadget如果您是指执行process.start(c:\windows\system32\cmd.exe),那么我尝试了该方法-或者您是指在cmd命令本身中?查询的完整路径。exe@MrGadget我也尝试过使用这个方法,得到了相同的结果——“query”没有被识别为有效的内部或外部命令,可操作的程序或批处理文件。提供完整路径?@MrGadget如果您是指执行process.start(c:\windows\system32\cmd.exe),那么我尝试过了-或者您是指在cmd命令本身中?query.exe的完整路径