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文件之前,我直接启动了命令。他们在 shell 上运行良好,但在使用Process.Start.

为什么这会发生在我身上?

输出:

C:\Dev\NetworkAdapterTest\NetworkAdapterTest\bin\Debug>netsh mbn connect interface=\"Mobile Breitbandverbindung\" connmode=name name=\"A1 2\" 找不到以下命令:mbn connect interface="Mobile Breitbandverbindung"连接模式=名称名称=“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

你的 arguments 变量的内容似乎没有多大意义。如果您的程序位于“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。

我要检查的另一件事是您使用的是正确的路径。最简单的方法是将 Bat 与可执行文件放在同一目录中,或者引用文件名中的完整路径。

Stack Overflow - 如何从 Windows 窗体执行批处理文件

于 2011-04-07T16:15:03.940 回答