Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否从vb.net沙盒调用CMD?_Vb.net_Windows_Batch File_Cmd_Process - Fatal编程技术网

是否从vb.net沙盒调用CMD?

是否从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

我一直在尝试调用cmd来运行一个命令并从中获得输出——特别是“queryuser/server:servername”命令,并且发现了很多讨论如何运行它的帖子。但当我运行它时,它似乎适用于大多数命令(ipconfig、ping、tracert),但不适用于我的查询用户命令。有趣的是,下面的代码似乎适用于大多数命令,但不是这个命令

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的完整路径