【问题标题】:VB.net run process not working - command line is?VB.net 运行过程不起作用 - 命令行是?
【发布时间】:2015-12-05 10:11:06
【问题描述】:

在命令行我可以运行以下命令:

openfiles /query /s \\pha-sr-myserver /v > s:\textfile.txt

这运行良好并在服务器 pha-sr-myserver 上生成一个打开文件列表并将其输出到 textfile.txt

现在我试图在代码中重现它,但它不起作用:

Dim MyProcess As Process
Dim cText As String
Dim Shellcommand As String = "c:\windows\system32\openfiles.exe"
Dim ShellArgs As String = "/query /s \\pha-sr-myserver /v > S:\textfile.txt"
MyProcess = Process.Start(Shellcommand, ShellArgs)
MyProcess.WaitForExit()

这已经过了阶段,但该文件从未产生过,对于我的生活,我看不出有什么问题。 我尝试将参数封装在双引号等中。 我已经像这样炮击了很多次,但无法缝合以使其正常工作。 任何想法都会非常感激。 谢谢 格雷厄姆

【问题讨论】:

    标签: vb.net command-line-arguments command-prompt


    【解决方案1】:

    openfiles.exe 无法识别> S:\textfile.txt。只有 cmd.exe 才能理解。您需要使用 Process.Start 启动 cmd.exe 或直接启动您的应用程序,然后重定向其标准输出以捕获它。试试这样的:

    Dim shellArgs As String = "/query /s \\pha-sr-myserver /v"
    Dim output As String = runCommandLineApp("c:\windows\system32\openfiles.exe", Nothing, shellArgs)
    'Do something with output here, such as write it to a file.
    
    Private Function runCommandLineApp(appFileName As String, workingDirectory As String, Optional args As String = Nothing) As String
        Dim psi As New ProcessStartInfo(appFileName, args)
        psi.RedirectStandardOutput = True
        psi.UseShellExecute = False
        psi.CreateNoWindow = True
        psi.WindowStyle = ProcessWindowStyle.Hidden
    
        If workingFolder IsNot Nothing Then
            psi.WorkingDirectory = workingFolder
        End If
    
        Dim p As New Process()
        p.StartInfo = psi
        p.Start()
    
        Dim output As String = p.StandardOutput.ReadToEnd()
    
        p.WaitForExit()
    
        Return output
    
    End Function
    

    【讨论】:

      【解决方案2】:

      只有cmd.exe 可以将> 解释为重定向。 因此,最简单的方法是在您的程序中运行cmd.exe

      Dim MyProcess As Process
      Dim cText As String
      Dim Shellcommand As String = "cmd"
      Dim ShellArgs As String = "/c openfiles /query /s \\pha-sr-myserver /v > S:\textfile.txt"
      MyProcess = Process.Start(Shellcommand, ShellArgs)
      MyProcess.WaitForExit()
      

      【讨论】:

        【解决方案3】:

        你可以试试简单的Shell command

        Dim sComando As String
        Dim Shellcommand As String = "c:\windows\system32\openfiles.exe"
        sComando = """" & Shellcommand & """" & " /query /s \\pha-sr-myserver /v > S:\textfile.txt"
        Shell(sComando , AppWinStyle.Normal, True)
        

        或者这个:

        Dim MyProcess As Process
        Dim cText As String
        Dim Shellcommand As String = "c:\windows\system32\openfiles.exe"
        Dim oShellArgs As ProcessStartInfo
        
        
        oShellArgs = New ProcessStartInfo(Shellcommand , " /query /s \\pha-sr-myserver /v ")  ' remove this > "  "S:\textfile.txt"" ")
        oShellArgs.RedirectStandardOutput = true
        oShellArgs.RedirectStandardError = true
        MyProcess = Diagnostics.Process.Start(oShellArgs)
        
        MyProcess.StandardOutput.ReadToEnd() ' read this list of string
        
        MyProcess.WaitForExit()
        

        【讨论】:

        • 我都试过了,他们仍然不生成文件,不知道出了什么问题!
        • @GrahamJones 您的问题源自“ > S:\textfile.txt”。无法执行该重定向。也许您可以尝试使用“cmd”,或者创建一个要调用的“bat”文件。无论如何,我已经编辑了我的答案以使用“processstartinfo”
        猜你喜欢
        • 2013-06-14
        • 2021-09-30
        • 2016-07-28
        • 1970-01-01
        • 2022-10-19
        • 2019-01-23
        • 2012-08-16
        • 1970-01-01
        • 2019-02-08
        相关资源
        最近更新 更多