2011-04-07 78 views
1

我寫了一個腳本BAT自動連接和斷開寬帶連接:的Process.Start,批處理文件和報價

netsh mbn connect interface="Mobile Broadband Connection" connmode=name name="My Provider" 
netsh mbn disconnect interface="Mobile Broadband Connection" 

當我點擊BAT腳本它工作正常,但是當我執行它Process.Start

var startInfo = new ProcessStartInfo 
    { 
     FileName = "cmd.exe", 
     Arguments = "/c reconnect.bat", 
     WindowStyle = ProcessWindowStyle.Minimized, 
     UseShellExecute = false, 
     RedirectStandardOutput = true, 
     RedirectStandardError = true 
    }; 

    var process = new Process 
    { 
     StartInfo = startInfo 
    }; 
    process.Start(); 

的netsh返回的MBN命令沒有被發現的錯誤。

在我使用BAT文件之前,我直接啓動了這些命令。他們在外殼上工作得很好,但使用Process.Start時出現同樣的錯誤。

這是爲什麼發生在我身上?

輸出:

C:\開發\ NetworkAdapterTest \ NetworkAdapterTest \ BIN \調試>的netsh MBN連接接口= \ 「移動 Breitbandverbindung \」 connmode =名 名= \ 「A1 2 \」未找到以下命令 :mbn connect interface =「Mobile Breitbandverbindung」 connmode = name name =「A1 2」。

C:\開發\ NetworkAdapterTest \ NetworkAdapterTest \ BIN \調試>的netsh MBN斷開接口= \ 「移動 Breitbandverbindung \」 以下 命令沒有被發現:MBN斷開 接口= 「移動Breitbandverbindung」

請注意報價是如何真正連線的。當我直接啓動命令時,我遇到了同樣的問題。

當我用Visual Studio 2008編譯解決方案時,一切都按預期工作。

問題不再相關。

+0

您是否獲得了同樣的錯誤,如果你與轉義引號手動在命令行中執行命令? – 2011-04-07 16:19:40

+0

如果我運行第一個命令(使用正確的引號),則不會出現錯誤。如果我運行錯誤消息中寫入的命令,則會出現錯誤。 – xsl 2011-04-07 16:21:35

+0

我沒有問,如果你得到「一個」的錯誤,但如果你得到*相同的*錯誤... – 2011-04-07 17:43:02

回答

2

您的參數變量的內容似乎沒有多大意義。如果您的程序位於「C:\ Temp」中,它將是:「C:\ Temp \/c reconnect.bat」。
如果bat文件是在同一文件夾作爲您的應用程序,你可能想使用此代碼:

var arguments = string.Format("/c \"{0}\"", 
        Path.Combine(Application.StartupPath, "reconnect.bat")); 

額外的報價,如果您的路徑中有空格在裏面。

+0

我將其更改爲上述編輯,但仍遇到同樣的問題。 – xsl 2011-04-07 16:14:04

+0

嘗試了你的代碼,並得到了同樣的錯誤。 – xsl 2011-04-07 16:22:13

1

不是使用「cmd.exe」,而是嘗試直接啓動批處理文件嗎?它應該工作而不必經過cmd.exe。

我會檢查的另一件事是,你正在使用正確的路徑。最簡單的方法是將Bat放在與可執行文件相同的目錄中,或者引用文件名中的完整路徑。

Stack Overflow - how to execute a batch file from windows form

+0

我試圖直接啓動bat文件,但沒有成功 - 仍然有相同的錯誤。 – xsl 2011-04-07 16:23:24