在.NET中获取原始(非分裂)命令行

时间:2012-05-30 18:08:25

标签: c# .net command-line-arguments

在.NET中,我们可以从Main(string[])Environment.GetCommandLineArgs()的参数轻松访问字符串数组中的拆分命令行参数。但是,有没有办法将未解析的命令行作为一个字符串?

背景:我的应用程序将自己添加到FileExplorer上下文菜单(就像Notepad ++那样)。当它以这种方式启动时,文件名不会引用传入,这意味着如果路径中有空格,它就会被分解。我知道我可以通过在%1这样的注册表中的引号中包含myapp.exe "%1"来解决这个问题,但是当我检查其他应用程序的注册表时,他们没有这样做。它们很像notepad.exe %1 - 它们有完整的命令行。我想知道它是否可以在.NET中使用。

3 个答案:

答案 0 :(得分:22)

尝试使用Environment.CommandLine

答案 1 :(得分:7)

尝试:

Environment.CommandLine

最好使其达到30个字符。

答案 2 :(得分:3)

要获取未解析的,未经修改的原始命令行,您必须从kernel32进行P / Invoke GetCommandLine。一些解析将由操作系统进行。例如,无论使用何种技术,都将从命令行文本中排除诸如>foo.txt之类的IO重定向。

Environment.CommandLine可能就足够了,但要注意它会删除参数之间的间隙空格(除非参数本身用引号括起来),它会从引用的参数中删除引号。

例如,对于命令行:

test.exe this is "a test"

Environment.CommandLine等于:“this is a test

但GetCommandLine产量: “test.exe this is "a test"”,空格和引号完整,以及exe的路径。

注意当使用这种技术时,你必须手动解析命令行文本,这可能涉及剥离exe的路径,如果路径包含空格,它本身可以用引号括起来