0

現在、C#コードで実行している.exeがあります。.exeは特定の場所からファイルのリストを収集します。実行すると、ユーザーはescを押して終了するかEnterキーを押して再収集するように求められます。これをコードから自動化されたプロセスとして実行しようとしているので、-sなどのコマンドライン引数を追加して、ユーザー入力のプロンプトをバイパスしたいと思います。これをバイパスしないと、.exeが閉じることはなく、ソフトウェアは最終的にクラッシュします。これが私の.exeコードです

class StackGrabber
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
        try
        {
            StackReader.MessageHandler.OnMessage += new StackReader.MessageHandler.NotificationHandler(OnNotification);

            StackGrabber grabber = new StackGrabber();
            grabber.Grab();
        }
        catch (Exception ex)
        {
            DisplayMessage(ex.ToString());
        }
    }

    private volatile bool IsComplete = false;
    private StackReader.StackReader reader;

    void Grab()
    {
        try
        {
            DisplayMessage("Grabbing stacks... \n");

            reader = new StackReader.StackReader();
            reader.OnReadComplete += new System.Windows.Forms.MethodInvoker(OnComplete);

            if (reader.ReadStacks() > 0)
            {
                while (!reader.IsComplete)
                    Thread.Sleep(500);
            }
            else
            {
                Thread.Sleep(500);
            }
            DisplayMessage(Environment.NewLine + "Press esc to exit" + Environment.NewLine);
               //...
               //...
            Console.Read();
        }
        catch (Exception ex)
        {
            DisplayMessage(ex.ToString());
        }
    }

    
    public static void OnNotification(string msg)
    {
        DisplayMessage(msg);
    }

    public void OnComplete()
    {
        IsComplete = true;
    }

    private static object ConsoleLock = new object();
    private static void DisplayMessage(string msg)
    {
        lock (ConsoleLock)
        {
            Console.WriteLine(msg);
        }
    }
}

そして、私はこのように実行可能ファイルを呼び出します:

StackGrab.StartInfo.FileName = @"..\\bin\\StackGrabber.exe";
            StackGrab.StartInfo.CreateNoWindow = true;
            StackGrab.StartInfo.UseShellExecute = false;
            StackGrab.Start();
            StackGrab.WaitForExit();

コマンドプロンプトでStackGrabber.exeを呼び出してC:\>StackGrabber -s、「esc」入力が終了するのを待たないようにしたい

注:これは、C#2.0、Visual Studio 2005、およびWinXP32ビットを使用している私のソフトウェアに関する質問です。

4

3 に答える 3

1

ブーリアン フラグを StackGrabber クラスに追加して、ユーザーにプロンプ​​トを表示しないようにすることができます。初期化時に true に設定する必要があります。次に、args に use Array.Existsを設定して、パラメーターを見つけます。

if(Array.Exists(args, delegate(string s) { return s.Equals("-s"); }))
    grab.PromptUser = false;

次に、グラブ関数で後で確認します。

if(this.PromptUser)
    Console.Read();

編集: Main 関数の args パラメータは、プログラムに提供されたコマンド ライン パラメータです。コマンド ライン引数の使用方法に関する記事を次に示します。

于 2012-07-11T18:29:01.360 に答える
1

StartInfo には、引数を渡すために使用できる文字列型の Arguments または CommandArguments メンバーがあります。

于 2012-07-11T18:30:17.203 に答える
0

の はStatic void Main(string[] args)argsコマンド ライン引数のリストです。

デバッガーからコマンド ライン引数を追加するには、プロジェクトを右クリックして [プロパティ] に移動します。 [開始オプション] ヘッダーの下の
[デバッグ] タブをクリックすると、[コマンド ライン引数]
というボックスが表示されます。

そこに議論を入力できます

于 2012-07-11T18:30:50.587 に答える