2

cmd.exe で実行中のコマンドを中断したいと考えています。以下のコードでは、例として ping www.stackoverflow.com -t を使用しています。

    public void Run()
    {
        System.Diagnostics.ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo("cmd.exe");

        si.RedirectStandardInput = true;
        si.RedirectStandardOutput = true;
        si.RedirectStandardError = true;
        si.UseShellExecute = false;
        si.CreateNoWindow = false;
        //si.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

        System.Diagnostics.Process console = new Process();
        console.StartInfo = si;

        console.EnableRaisingEvents = true;
        console.OutputDataReceived += proc_OutputDataReceived;
        console.ErrorDataReceived += proc_ErrorDataReceived;

        console.Start();

        console.BeginOutputReadLine();
        console.BeginErrorReadLine();

        console.StandardInput.WriteLine("ping www.stackoverflow.com -t");

        Thread.Sleep(4000);
        bool success = GenerateConsoleCtrlEvent((uint)0, (uint)console.SessionId);
        if (!success)
        {
            MessageBox.Show("Error Code: " + Marshal.GetLastWin32Error().ToString());
        }

        char asdf = (char)0x3;

        console.StandardInput.WriteLine('\x3');
        console.StandardInput.WriteLine(asdf);
        console.StandardInput.Write(asdf);

        //console.StandardInput.Close();

        console.StandardInput.WriteLine(@"exit");
        console.WaitForExit();
    }

GenerateConsoleCtrlEvent からのエラー コードは 6 です。

私は次の指示に従いました。

  1. Windows 上のアプリケーションに ctrl-C (SIGINT) を送信できますか?

  2. http://pastebin.com/vQuWQD8F

  3. 文字の代わりにキーをプロセスに送信する方法は?

ただし、プロセスを中断することはできません。

どんな助けでも大歓迎です、

4

1 に答える 1

0

これは、キーやその他のメッセージをアプリケーションに送信する際の非常に一般的な問題になる可能性があります。送信先のアプリケーションの権限評価がプログラムよりも高い場合、通常、キーまたはメッセージの送信に成功しないことに注意してください。管理者権限でプログラムを実行してみてください。または、Visual Studioを使用してデバッグしている場合は、管理者権限でVisualStudioを実行します。

編集:

これがあなたの問題ではないことを見て、ここServiceControllerに文書化されているクラスを使用して見てみたいと思います。これにより、よりも細かい制御が可能になり、このような状況での信頼性を高めるために強くお勧めします。他の誰かが役立つかもしれない一般的な問題であるという理由だけで、以前の答えを残しておきますProcess

始めるための2つのチュートリアルを次に示します。

http://www.codeproject.com/Articles/31688/Using-the-ServiceController-in-C-to-stop-and-start http://www.c-sharpcorner.com/uploadfile/mahesh/servicecontroller-in -Cシャープ/

これがお役に立てば幸いです。

于 2013-03-03T00:15:32.833 に答える