C# 进程。启动、批处理文件和报价

C# 进程。启动、批处理文件和报价,c#,process,batch-file,quoting,C#,Process,Batch File,Quoting,我编写了一个自动连接和断开宽带连接的BAT脚本: netsh mbn connect interface="Mobile Broadband Connection" connmode=name name="My Provider" netsh mbn disconnect interface="Mobile Broadband Connection" 当我单击BAT脚本时,它工作正常,但当我使用过程执行它时。启动: var startInfo = new ProcessStartIn

我编写了一个自动连接和断开宽带连接的
BAT
脚本:

netsh mbn connect interface="Mobile Broadband Connection" connmode=name name="My Provider" 
netsh mbn disconnect interface="Mobile Broadband Connection"
当我单击
BAT
脚本时,它工作正常,但当我使用
过程执行它时。启动

    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连接接口=\“移动 Breitbandverbindung\“connmode=名称 名称=\“A1 2\”以下命令 找不到:mbn connect interface=“Mobile Breitbandverbindung” connmode=name=“A1 2”

C:\Dev\NetworkAdapterTest\NetworkAdapterTest\bin\Debug>netsh mbn断开连接接口=\“移动 Breitbandverbindung \“以下内容 未找到命令:mbn disconnect interface=“Mobile Breitbandverbindung”

注意引用是如何连接的。当我直接启动命令时,我遇到了同样的问题

当我使用VisualStudio2008编译解决方案时,一切都按预期进行


问题不再相关。

您的arguments变量的内容似乎没有多大意义。如果您的程序位于“C:\Temp”中,它将是:“C:\Temp\/C reconnect.bat”。
如果bat文件与应用程序位于同一文件夹中,则可能需要使用以下代码:

var arguments = string.Format("/c \"{0}\"", 
                  Path.Combine(Application.StartupPath, "reconnect.bat"));
额外的引号,以防路径中有空格。

您是否尝试过直接启动批处理文件而不是使用“cmd.exe”?它不需要通过cmd.exe就能工作

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


我将其更改为上面的编辑,但仍然存在相同的问题。如果在命令行中手动使用转义引号执行命令,是否会出现相同的错误?如果运行第一个命令(使用正确的引号),则不会出现错误。如果我按照错误消息中所写的方式运行命令,我会得到一个错误。我不是问,如果你得到“一个”错误,但是如果你得到相同的错误…我试图直接启动bat文件,但没有成功-仍然得到相同的错误。