1

ブロードバンド接続を自動的に接続および切断するBATスクリプトを作成しました。

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:\Dev\NetworkAdapterTest\NetworkAdapterTest\bin\Debug>netsh mbn connect interface=\"Mobile Breitbandverbindung\" connmode=name name=\"A1 2\" 次のコマンドが見つかりませんでした: mbn connect interface="Mobile Breitbandverbindung" connmode=name name="A1 2".

C:\Dev\NetworkAdapterTest\NetworkAdapterTest\bin\Debug>netsh mbn disconnect interface=\"Mobile Breitbandverbindung\" 次のコマンドが見つかりませんでした: mbn disconnect interface="Mobile Breitbandverbindung"

引用が実際にどのように配線されているかに注目してください。コマンドを直接開始したときにも同じ問題が発生しました。

Visual Studio 2008 でソリューションをコンパイルすると、すべてが意図したとおりに機能します。

質問はもはや関連性がありません。

4

2 に答える 2

2

引数変数の内容はあまり意味がないようです。プログラムが「C:\Temp」にある場合、「C:\Temp\/c reconnect.bat」になります。
bat ファイルがアプリケーションと同じフォルダーにある場合は、次のコードを使用することをお勧めします。

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

パスにスペースが含まれている場合の追加の引用符。

于 2011-04-07T16:09:55.967 に答える
1

「cmd.exe」を使用する代わりに、バッチ ファイルを直接起動してみましたか? cmd.exe を経由しなくても動作するはずです。

私がチェックするもう1つのことは、正しいパスを使用していることです。最も簡単な方法は、Bat を実行可能ファイルと同じディレクトリに置くか、ファイル名でフル パスを参照することです。

スタック オーバーフロー - Windows フォームからバッチ ファイルを実行する方法

于 2011-04-07T16:15:03.940 に答える