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 に答える