c# - 我能否以原始形式(例如包括引号)获取我的申请的论据?

标签 c# .net console-application command-line-arguments processstartinfo

我有一个 .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.Lengt‌​h+bodgeLen).Trim();

关于c# - 我能否以原始形式(例如包括引号)获取我的申请的论据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16453627/

相关文章:

c# - 在 Razor 组件 (Blazor) 中渲染 Razor 局部 View

c# - .NET Bitmap.Load 方法在不同的计算机上产生不同的结果

c# - Application.OpenForms.Count = 0 总是

c# - 从控制台应用程序记录 SOAP 消息

c# - c++反序列化通过UDP从C#应用程序发送的对象

c# - 串行端口数据接收事件处理程序

console-application - 如何使用 Web 发布管道和 Web 部署 (MSDEPLOY) 来发布控制台应用程序?

c# - 如何处理触发事件中重叠的 Console.Writeline()?

c# - 使用 Dapper 多次执行存储过程?

.net - Settings 和 *.config 之间有什么区别?