2011-07-14 45 views
0

它正在嘗試推出這個代碼通常會從一個批處理文件運行CMD和批次幫助vb.net

批處理文件代碼:

@ECHO OFF 
SET BINDIR=%~dp0 
CD /D "%BINDIR%" 
"%ProgramFiles%\Java\jre6\bin\java.exe" -Xincgc -Xmx1G -jar craftbukkit-0.0.1-SNAPSHOT.jar 
PAUSE 

Vb.net代碼:

If cmbserverapplication.Text = "Bukkit Server" Then 
      If System.IO.File.Exists(root + "\craftbukkit-0.0.1-SNAPSHOT.jar") = True Then 
       If Environment.Is64BitOperatingSystem = True Then 
        bit = "64" 
       Else 
        bit = "32" 
       End If 
       serverpath = "craftbukkit-0.0.1-SNAPSHOT.jar" 
       Dim javapath As String 
       If bit = 64 Then 
        If System.IO.File.Exists("C:\Program Files (x86)\Java\jre7\bin\java.exe") = True Then 
         javapath = "path = C:\Program Files (x86)\Java\jre7\bin\java" 
        Else 
         javapath = "path = C:\Program Files (x86)\Java\jre6\bin\java" 
        End If 
       Else 
        If System.IO.File.Exists("C:\Program Files\Java\jre7\bin\java.exe") = True Then 
         javapath = "path = C:\Program Files\Java\jre7\bin\java" 
        Else 
         javapath = "path = C:\Program Files\Java\jre6\bin\java" 
        End If 
       End If 
       Dim pi As New ProcessStartInfo("Cmd.exe") 
       pi.Arguments = "@ECHO OFF" 
       pi.Arguments = "SET BINDIR=%~dp" 
       pi.Arguments = "CD /D ""%BINDIR%""" 
       pi.Arguments = """" + javapath + ".exe" + """" + " -Xincgc -Xmx1G -jar craftbukkit-0.0.1-SNAPSHOT.jar" 
       pi.Arguments = "Pause" 

       Process.Start(pi) 

       Me.Close() 

      Else 
       MsgBox("The server file does not exist. Please make sure that you have select the right file type and that it has not been renamed.") 
      End If 

     End If 
    End If 

當我運行代碼cmd.exe打開但沒有任何反應

+0

這將是更明智的批處理文件使用文本編輯器,保存它,那麼就使用'Process'類啓動批處理文件,或者如果你想在你的項目中創建一個文本文件,將其嵌入爲資源,然後在需要時將其解壓縮到臨時目錄並運行。然後你可以在完成後刪除它 – Icemanind

回答

1

三個問題:

  1. 你的java路徑與術語 「路徑=」 開頭,迷惑的命令行。刪除這個。

  2. 命令行只能運行一個命令。通過反覆設置pi.Arguments,您每次都會替換該命令。唯一執行的命令是PAUSE

  3. 您的CMD命令行完全沒有了。它應該是這個樣子:

    Cmd.exe /c BatchFile.bat 
    

如果你真的想運行多個命令,你可以在每行之間使用&&

試試這個。根據需要更改WorkingDirectory。我特意在SET BINDIR命令上留下了空間,以防止路徑中出現額外的空間。在其他方面,我把它留在那裏以便閱讀。

Dim pi As New ProcessStartInfo("Cmd.exe") 
pi.WorkingDirectory = "C:\Location of Batch file" 
pi.Arguments = "/c " & _ 
    "@ECHO OFF && " & _ 
    "SET BINDIR=%CD%&& " & _ 
    """" & JavaPath & """ -Xincgc -Xmx1G -jar craftbukkit-0.0.1-SNAPSHOT.jar && " & _ 
    "PAUSE" 
Process.Start(pi)