如何创建命令行参数

时间:2012-07-11 18:23:56

标签: c# visual-studio command-line c#-2.0 command-line-arguments

我目前有一个.exe我在我的C#代码中运行,.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 32位

的软件的问题

3 个答案:

答案 0 :(得分:1)

您可以向StackGrabber类添加一个布尔标志,以指示是否不会提示用户。您需要在初始化时将其设置为true。然后在args上设置使用Array.Exists来查找参数。

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

然后在抓取功能中检查:

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

编辑:Main函数的args参数是提供给程序的命令行参数。 Here是一篇关于如何使用命令行参数的文章。

答案 1 :(得分:1)

StartInfo有一个String类型的Arguments或CommandArguments成员,可用于传入参数

答案 2 :(得分:0)

<{1>}中的

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

从调试器中添加命令行参数 右键单击您的项目并转到“属性”
单击调试选项卡
在Start Options标题下会有一个名为“Command Line Arguements”的框。

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