如何创建命令行参数

Posted

技术标签:

【中文标题】如何创建命令行参数【英文标题】:how do I create a command line argument 【发布时间】:2012-07-11 18:23:55 【问题描述】:

我目前有一个在我的 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:\&gt;StackGrabber -s 并且它不会等待“esc”输入退出

注意:这是关于我使用 C#2.0、Visual Studio 2005 和 WinXP 32bit 的软件的问题

【问题讨论】:

您的问题是关于将参数传递给exe还是解析exe中传入的参数? 【参考方案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 参数是提供给程序的命令行参数。 Here 是一篇关于如何使用命令行参数的文章。

【讨论】:

args 是一个字符串 [] 而我在 C#2.0 中没有 .Contains 方法 糟糕,我没有注意到 2.0 是您的目标平台。您可以使用 Array.Exist 方法,它有点麻烦,但可以完成工作。【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

以上是关于如何创建命令行参数的主要内容,如果未能解决你的问题,请参考以下文章

HOOK NtCreateThread 怎么获得 创建进程的命令行参数

如何测试使用的命令行参数?

如何访问命令行参数?

如何仅使用命令行参数读取唯一行?

如何在 C# 中使用命令行参数创建应用程序快捷方式(.lnk 文件)

如何检查“.bat”文件中的命令行参数?