using System.Collections.Generic;
public static void Main()
string cmdLine = "\"c:\\program files\\svchost.exe\" -k -s svcName -t \"some text\"";
Console.WriteLine("\nStep 1 - exe path wihtout quotes:");
string[] sa = cmdLine.Split('"').Where(s => !string.IsNullOrEmpty(s)).ToArray();
Console.WriteLine("exePath=" + sa[0]);
Console.WriteLine("\nStep 2 - only args (trimmed and with quotes again):");
string argString = String.Join("", sa.Skip(1).Select(s => !s.TrimStart(' ').StartsWith("-") ? "\"" + s + "\"" : s.TrimStart(' ')));
Console.WriteLine("argString=" + argString);
Console.WriteLine("\nStep 3 - args as list:");
List<String> args = argString.Split('-').Where(s => !string.IsNullOrEmpty(s)).Select(a => "-" + a).ToList();
foreach(String arg in args) {
Console.WriteLine("\nStep 4 - as key value pairs:");
Dictionary<string,string> dict = new Dictionary<string, string>(args.Count);
for (int i = 0; i < args.Count(); i++)
string key = args[i].TrimStart(' ').Split(' ').Take(1).FirstOrDefault();
string val = args[i].Replace(key + " ", "");
Console.WriteLine("key={0} val={1}", key, val);
Console.WriteLine("\nKeyValuePairs:");
foreach(KeyValuePair<String, String> kv in dict) {
Console.WriteLine("k=" + kv.Key + " v=" + kv.Value) ;