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();
4

1 回答 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指令而不是使用完全限定名称时,请注意代码是如何变得不那么混乱的。)

于 2013-07-14T18:33:48.783 回答