/// <summary> /// Parse a command line into arguments. /// </summary> /// <param name="command_line">The parsed command line.</param> /// <returns>The list of arguments.</returns> public static string[] ParseCommandLine(string command_line) { if (string.IsNullOrWhiteSpace(command_line)) { return(new string[0]); } using (var argv = Win32NativeMethods.CommandLineToArgvW(command_line, out int argc)) { if (argv.IsInvalid) { throw new NtException(NtObjectUtils.MapDosErrorToStatus()); } string[] ret = new string[argc]; for (int i = 0; i < argc; ++i) { ret[i] = Marshal.PtrToStringUni(Marshal.ReadIntPtr(argv.DangerousGetHandle() + IntPtr.Size * i)); } return(ret); } }