如何创建命令行参数
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:\>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 怎么获得 创建进程的命令行参数