以下命令未找到 netsh。

3
我试图执行一些"netsh"命令,但无论我做什么都会遇到同样的错误:“未找到以下命令:netsh”。
我可以验证路径“C:\Windows\System32\netsh.exe”是有效的,当我通过命令提示符运行相同的命令和参数时,一切正常。
这是我正在使用的代码示例。
ProcessStartInfo procInfo = new ProcessStartInfo
            {
                WorkingDirectory = System.IO.Path.GetPathRoot(System.Environment.SystemDirectory),
                FileName = @"netsh.exe",
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                UseShellExecute = false,
                CreateNoWindow = true,
                Arguments = String.Format(@"{0}\{1} {2}", System.Environment.SystemDirectory, @"netsh.exe", "wlan start hostednetwork"),
                WindowStyle = ProcessWindowStyle.Hidden
            };

            Process proc = Process.Start(procInfo);
            proc.WaitForExit();
1个回答

3

目前你正在将完整的路径名作为参数传递,但我猜你想将其传递为文件名。例如:

FileName = Path.Combine(Environment.SystemDirectory, "netsh.exe"),
Arguments = "wlan start hostednetwork"

例如,这个简短但完整的程序不会抛出任何异常 - 我不知道它是否符合您的要求,但它不会因为您描述的异常而失败。
using System;
using System.Diagnostics;
using System.IO;

class Test
{    
    static void Main()
    {
        ProcessStartInfo procInfo = new ProcessStartInfo
        {
            WorkingDirectory = Path.GetPathRoot(Environment.SystemDirectory),
            FileName = Path.Combine(Environment.SystemDirectory, "netsh.exe"),
            Arguments = "wlan start hostednetwork",
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            UseShellExecute = false,
            CreateNoWindow = true,
            WindowStyle = ProcessWindowStyle.Hidden
        };

        Process proc = Process.Start(procInfo);
        proc.WaitForExit();
    }
}

(顺便说一下,当您利用using指令而不是使用完全限定名称时,代码会变得更加简洁。)

很遗憾,在这里(Win7)它不起作用。它仍然显示“未找到以下命令”,但是当它说“命令”时,它指的是文件名netsh.exe之后的参数...由于某种奇怪的原因... - markj
@markj:听起来像是你给netsh命令的问题。你想要做什么? - Jon Skeet
@JonSkeet: 我尝试了以下命令:netsh mbn connect interface="移动宽带" connmode=name name="TDC Mobil" 目的是连接移动宽带连接。我已经知道引号是罪魁祸首 - 以某种奇怪的方式。最终,我通过创建批处理文件,在让AutoHotkey脚本运行该批处理文件,然后让我的主应用程序运行此脚本(编译为exe文件)来使其工作。这是一个真正的解决方法,但也是一个稳定和功能良好的解决方法 :) - markj
是的,我尝试了3-4种不同的方法来转义引号。直接从我的主应用程序作为进程运行批处理文件也返回了相同的错误。 - markj
实际上,我并不百分之百确定引号是问题所在。我可能错过了其他东西 - 某个显而易见的地方。 - markj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接