0

我目前有一个在我的 C# 代码中运行的 .exe,.exe 收集来自特定位置的文件列表,一旦它运行它会提示用户按 esc 退出或输入重新收集。因为我试图从我的代码中将其作为自动化过程运行,所以我想添加一个命令行参数,如 -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 和 WinXP 32bit 的问题

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

in Static void Main(string[] args), args是您的命令行参数列表。

要从调试器添加命令行参数,您可以右键单击您的项目并转到“属性”
单击
“开始选项”标题下的调试选项卡,将出现一个名为“命令行参数”的框。

你可以在那里输入你的论点

于 2012-07-11T18:30:50.587 回答