0

次のコードがあります。

        // Creating procesStartInfo obj
        System.Diagnostics.ProcessStartInfo procStartInfo
            = new System.Diagnostics.ProcessStartInfo();

        procStartInfo.RedirectStandardOutput = true;
        procStartInfo.UseShellExecute = false;

        // Do not create the black window.
        procStartInfo.CreateNoWindow = true;

        //Window state hidden .. so black windows will come inbetween
        procStartInfo.WindowStyle
            = System.Diagnostics.ProcessWindowStyle.Hidden;

        // Creating Process obj to run the net time cmd
        System.Diagnostics.Process p;
        string output;
        p = new System.Diagnostics.Process();

        p.StartInfo = procStartInfo;
        p.StartInfo.FileName = "w32tm";
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;

        p.StartInfo.Arguments = " /resync /computer:xxxxx977";
        p.Start();
        p.WaitForExit();

        output = p.StandardOutput.ReadLine().ToString();
        MessageBox.Show(output);

このコードを実行すると、次のエラー メッセージが表示されます。

次のエラーが発生しました: 指定されたモジュールが見つかりませんでした。(0x8007007E)。

コマンドをリモートまたはローカルで実行すると、正常に動作しますw32tm /resync /computer:xxxxx977。コマンドラインからではなく、コードでプロセスを開始するとこのエラーが発生するのはなぜですか?

4

2 に答える 2

0

使ってみて

procStartInfo.UseShellExecute = true;

「w32tm」の場所を指定しなかったため、ファイルが見つからなかった可能性があります。完全なパスとその拡張子を指定するか、それ以外の場合は UseShellExecute を指定する必要があると思います。

ところで: 一部のプロパティは、コード内で 2 回設定されています。;-)

于 2013-02-04T08:25:21.370 に答える
0

このツールを使用して、DependencyWalker欠落していて検索パスで見つからないモジュールを見つけます。UseShellExecutetrueに設定すると役立つ場合があります。false に設定した理由は何ですか?

于 2013-02-04T08:36:12.853 に答える