在 .NET 中获取原始(未拆分)命令行

本文关键字:拆分 命令行 原始 NET 获取 | 更新日期: 2023-09-27 18:35:42

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

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

在 .NET 中获取原始(未拆分)命令行

尝试使用: Environment.CommandLine

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

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

例如,对于命令行:

test.exe this is "a test"

环境命令行等于:"this is a test"

但 GetCommandLine 产生:" test.exe this is "a test" ",空格和引号以及 exe 的路径保持不变。

请注意,使用此技术时,您必须手动解析命令行文本,这可能涉及剥离 exe 的路径,如果路径包含空格,则 exe 本身可能括在引号中。