我可以以原始形式(例如包括引号)获取我的申请的论据吗?

Lou*_*hys 3 .net c# processstartinfo console-application command-line-arguments

我有一个.Net应用程序,它接受一堆命令行参数,处理其中一些,并将其余部分用作另一个应用程序的参数

例如

MyApp.exe foo1 App2.exe arg1 arg2 ...
Run Code Online (Sandbox Code Playgroud)

MyApp.exe是我的应用程序, foo1是我的应用程序关心的参数.App2.exe是另一个应用程序,我的应用程序将运行带有arg1 arg2等的App2作为参数.

目前我的应用程序只是使用这样的东西运行App2.exe

Process.Start(args[1], String.Join(" ", args.Skip(2)).因此上面的命令将正确运行:带有参数"arg1 arg2"的App2.exe.但是,请考虑这样的事情

MyApp.exe foo1 notepad.exe "C:\Program Files\readme.txt"
Run Code Online (Sandbox Code Playgroud)

上面的代码不会知道引号,并将使用参数C:\ Program Files\readme.txt(不带引号)运行notepad.exe.我该如何解决这个问题?

mp3*_*ret 6

Environment.CommandLine
Run Code Online (Sandbox Code Playgroud)

会给你一个确切的命令行 - 你必须解析你的应用程序的路径,但其他工作就像一个魅力 - @idle_mind提到这个早期(有点)

编辑将示例移到答案中(因为人们显然仍然在寻找这个答案).请注意,当debuging vshost稍微搞砸命令行时.

#if DEBUG             
    int bodgeLen = "\"vshost.\"".Length; 
#else             
    int bodgeLen = "\"\"".Length; 
#endif              
string a = Environment.CommandLine.Substring(Assembly.GetExecutingAssembly().Location.Lengt??h+bodgeLen).Trim();
Run Code Online (Sandbox Code Playgroud)