19

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

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

4

2 回答 2

24

尝试使用:Environment.CommandLine

于 2012-05-30T18:12:43.437 回答
6

要获得未解析的、原始的、未修改的命令行,您必须从 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 的路径,如果路径包含空格,则该路径本身可能用引号引起来。

于 2015-09-21T17:14:08.750 回答