我有一个 .Net 应用程序,它接受一堆命令行参数,处理其中的一些,并将其余的用作另一个应用程序的参数
例如
MyApp.exe foo1 App2.exe arg1 arg2 ...
MyApp.exe
是我的应用程序,
foo1
是我的应用程序关心的参数。 App2.exe
是另一个应用程序,我的应用程序将以 arg1 arg2 等作为参数运行 App2。
目前我的应用程序只是使用类似这样的东西运行 App2.exe
Process.Start(args[1], String.Join("", args.Skip(2))
。所以上面的命令将正确运行:App2.exe with arguments "arg1 arg2 "。然而,考虑这样的事情
MyApp.exe foo1 notepad.exe "C:\Program Files\readme.txt"
上面的代码不会识别引号,并且会使用参数 C:\Program Files\readme.txt(不带引号)运行 notepad.exe。 我该如何解决这个问题?
最佳答案
Environment.CommandLine
会给你确切的命令行 - 你必须解析出你的应用程序的路径,但在其他方面就像一个魅力 - @idle_mind 早些时候提到过(有点)
编辑以将示例移动到答案中(因为人们显然仍在寻找这个答案)。请注意,在调试 vshost 时会稍微弄乱命令行。
#if DEBUG
int bodgeLen = "\"vshost.\"".Length;
#else
int bodgeLen = "\"\"".Length;
#endif
string a = Environment.CommandLine.Substring(Assembly.GetExecutingAssembly().Location.Length+bodgeLen).Trim();
关于c# - 我能否以原始形式(例如包括引号)获取我的申请的论据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16453627/