/// <summary> /// Parse the commandline arguments. /// </summary> /// <param name="args">Commandline arguments.</param> public string[] Parse(string[] args) { List <string> unprocessed = new List <string>(); for (int i = 0; i < args.Length; ++i) { string arg = args[i]; if (String.IsNullOrEmpty(arg)) // skip blank arguments { continue; } if (1 == arg.Length) // treat '-' and '@' as filenames when by themselves. { unprocessed.Add(arg); } else if ('-' == arg[0] || '/' == arg[0]) { string parameter = arg.Substring(1); if ("bt" == parameter) { BindPath bindPath = CommandLine.GetBindPath(parameter, args, ++i); if (null == bindPath) { break; } this.TargetBindPaths.Add(bindPath); } else if ("bu" == parameter) { BindPath bindPath = CommandLine.GetBindPath(parameter, args, ++i); if (null == bindPath) { break; } this.UpdatedBindPaths.Add(bindPath); } else if (parameter.Equals("cc", StringComparison.Ordinal)) { this.CabCachePath = CommandLine.GetDirectory(parameter, args, ++i); if (String.IsNullOrEmpty(this.CabCachePath)) { break; } } else if (parameter.Equals("delta", StringComparison.Ordinal)) { this.Delta = true; } else if (parameter.Equals("ext", StringComparison.Ordinal)) { if (!CommandLine.IsValidArg(args, ++i)) { Messaging.Instance.OnMessage(WixErrors.TypeSpecificationForExtensionRequired("-ext")); break; } this.Extensions.Add(args[i]); } else if ("nologo" == parameter) { this.ShowLogo = false; } else if ("notidy" == parameter) { this.Tidy = false; } else if ("o" == parameter || "out" == parameter) { this.OutputFile = CommandLine.GetFile(parameter, args, ++i); if (String.IsNullOrEmpty(this.OutputFile)) { break; } } else if (parameter.Equals("pdbout", StringComparison.Ordinal)) { this.PdbFile = CommandLine.GetFile(parameter, args, ++i); if (String.IsNullOrEmpty(this.PdbFile)) { break; } } else if (parameter.Equals("reusecab", StringComparison.Ordinal)) { Messaging.Instance.OnMessage(WixWarnings.DeprecatedCommandLineSwitch(arg, "-cc")); } else if (parameter.Equals("spdb", StringComparison.Ordinal)) { this.SuppressWixPdb = true; } else if (parameter.Equals("sacl", StringComparison.Ordinal)) { this.SuppressAclReset = true; } else if (parameter.Equals("t", StringComparison.Ordinal)) { string baseline; string transformPath; if (!CommandLine.IsValidArg(args, ++i)) { Messaging.Instance.OnMessage(WixErrors.BaselineRequired()); break; } baseline = args[i]; transformPath = CommandLine.GetFile(parameter, args, ++i); if (String.IsNullOrEmpty(transformPath)) { break; } // Verify the transform hasn't been added already. if (this.PatchTransforms.Any(t => t.TransformPath.Equals(transformPath, StringComparison.OrdinalIgnoreCase))) { Messaging.Instance.OnMessage(WixErrors.DuplicateTransform(transformPath)); break; } this.PatchTransforms.Add(new PatchTransform(transformPath, baseline)); } else if (parameter.StartsWith("sw", StringComparison.Ordinal)) { string paramArg = parameter.Substring(2); if (0 == paramArg.Length) { Messaging.Instance.SuppressAllWarnings = true; } else { int suppressWarning = 0; if (!Int32.TryParse(paramArg, out suppressWarning) || 0 >= suppressWarning) { Messaging.Instance.OnMessage(WixErrors.IllegalSuppressWarningId(paramArg)); } else { Messaging.Instance.SuppressWarningMessage(suppressWarning); } } } else if (parameter.StartsWith("wx", StringComparison.Ordinal)) { string paramArg = parameter.Substring(2); if (0 == paramArg.Length) { Messaging.Instance.WarningsAsError = true; } else { int elevateWarning = 0; if (!Int32.TryParse(paramArg, out elevateWarning) || 0 >= elevateWarning) { Messaging.Instance.OnMessage(WixErrors.IllegalWarningIdAsError(paramArg)); } else { Messaging.Instance.ElevateWarningMessage(elevateWarning); } } } else if ("v" == parameter) { Messaging.Instance.ShowVerboseMessages = true; } else if ("?" == parameter || "help" == parameter) { this.ShowHelp = true; break; } else { unprocessed.Add(arg); } } else if ('@' == arg[0]) { string[] parsedArgs = CommandLineResponseFile.Parse(arg.Substring(1)); string[] unparsedArgs = this.Parse(parsedArgs); unprocessed.AddRange(unparsedArgs); } else { unprocessed.Add(arg); } } return(unprocessed.ToArray()); }
/// <summary> /// Parse the commandline arguments. /// </summary> /// <param name="args">Commandline arguments.</param> private void ParseCommandLine(string[] args) { for (int i = 0; i < args.Length; ++i) { string arg = args[i]; if (null == arg || 0 == arg.Length) // skip blank arguments { continue; } if ('-' == arg[0] || '/' == arg[0]) { string parameter = arg.Substring(1); if ("cc" == parameter) { if (args.Length < ++i || '/' == args[i][0] || '-' == args[i][0]) { this.messageHandler.Display(this, WixErrors.DirectoryPathRequired(String.Concat("-", parameter))); return; } this.cabCachePath = args[i]; } else if ("ext" == parameter) { if (null != this.extension) { this.messageHandler.Display(this, WixErrors.SingleExtensionSupported()); return; } if (args.Length < ++i || '/' == args[i][0] || '-' == args[i][0]) { this.messageHandler.Display(this, WixErrors.TypeSpecificationForExtensionRequired("-ext")); return; } this.extension = args[i]; } else if ("nologo" == parameter) { this.showLogo = false; } else if ("notidy" == parameter) { this.tidy = false; } else if (parameter.StartsWith("sw")) { try { int suppressWarning = Convert.ToInt32(parameter.Substring(2), CultureInfo.InvariantCulture.NumberFormat); if (0 >= suppressWarning) { this.OnMessage(WixErrors.IllegalSuppressWarningId(parameter.Substring(2))); } this.messageHandler.SuppressWarningMessage(suppressWarning); } catch (FormatException) { this.OnMessage(WixErrors.IllegalSuppressWarningId(parameter.Substring(2))); } catch (OverflowException) { this.OnMessage(WixErrors.IllegalSuppressWarningId(parameter.Substring(2))); } } if ("o" == parameter || "out" == parameter) { if (args.Length < ++i || '/' == args[i][0] || '-' == args[i][0]) { this.messageHandler.Display(this, WixErrors.FilePathRequired(String.Concat("-", parameter))); return; } this.outputFile = Path.GetFullPath(args[i]); } else if ("reusecab" == parameter) { this.reuseCabinets = true; } else if ("sa" == parameter) { this.suppressAssemblies = true; } else if ("sf" == parameter) { this.suppressFiles = true; } else if ("sh" == parameter) { this.suppressFileHashAndInfo = true; } else if ("t" == parameter) { string transform = null; string baseline = null; if (args.Length < ++i || '/' == args[i][0] || '-' == args[i][0]) { this.messageHandler.Display(this, WixErrors.BaselineRequired()); return; } baseline = args[i]; if (args.Length < ++i || '/' == args[i][0] || '-' == args[i][0]) { this.messageHandler.Display(this, WixErrors.FilePathRequired(String.Concat("-", parameter))); return; } transform = Path.GetFullPath(args[i]).ToLower(); // Verify the transform hasnt already been added. if (this.inputTransforms.ContainsKey(transform)) { this.messageHandler.Display(this, WixErrors.DuplicateTransform(transform)); return; } this.inputTransforms.Add(transform, baseline); } else if ("v" == parameter) { this.messageHandler.ShowVerboseMessages = true; } else if ("wx" == parameter) { this.messageHandler.WarningAsError = true; } else if ("?" == parameter || "help" == parameter) { this.showHelp = true; } } else if ('@' == arg[0]) { this.ParseCommandLine(AppCommon.ParseResponseFile(arg.Substring(1))); } else { if (null == this.inputFile) { this.inputFile = Path.GetFullPath(args[i]); } else { this.OnMessage(WixErrors.AdditionalArgumentUnexpected(arg)); } } } }
/// <summary> /// Parse the commandline arguments. /// </summary> /// <param name="args">Commandline arguments.</param> private void ParseCommandLine(string[] args) { for (int i = 0; i < args.Length; ++i) { string arg = args[i]; if (null == arg || 0 == arg.Length) // skip blank arguments { continue; } if ('-' == arg[0] || '/' == arg[0]) { string parameter = arg.Substring(1); if ("aet" == parameter) { this.allowEmptyTransforms = true; } else if ("bt" == parameter) { string path = CommandLine.GetDirectory(parameter, this.messageHandler, args, ++i, true); if (String.IsNullOrEmpty(path)) { return; } if (-1 == path.IndexOf('=')) { this.targetSourcePaths.Add(path); } else { string[] namedPair = path.Split('='); this.targetNamedBindPaths.Add(namedPair[0], namedPair[1]); } } else if ("bu" == parameter) { string path = CommandLine.GetDirectory(parameter, this.messageHandler, args, ++i, true); if (String.IsNullOrEmpty(path)) { return; } if (-1 == path.IndexOf('=')) { this.updatedSourcePaths.Add(path); } else { string[] namedPair = path.Split('='); this.updatedNamedBindPaths.Add(namedPair[0], namedPair[1]); } } else if ("cc" == parameter) { this.cabCachePath = CommandLine.GetDirectory(parameter, this.messageHandler, args, ++i); if (String.IsNullOrEmpty(this.cabCachePath)) { return; } } else if ("delta" == parameter) { this.delta = true; } else if ("ext" == parameter) { if (!CommandLine.IsValidArg(args, ++i)) { this.messageHandler.Display(this, WixErrors.TypeSpecificationForExtensionRequired("-ext")); return; } this.extensions.Add(args[i]); } else if ("fv" == parameter) { this.setAssemblyFileVersions = true; } else if ("nologo" == parameter) { this.showLogo = false; } else if ("notidy" == parameter) { this.tidy = false; } else if ("swall" == parameter) { this.messageHandler.Display(this, WixWarnings.DeprecatedCommandLineSwitch("swall", "sw")); this.messageHandler.SuppressAllWarnings = true; } else if (parameter.StartsWith("sw", StringComparison.Ordinal)) { string paramArg = parameter.Substring(2); try { if (0 == paramArg.Length) { this.messageHandler.SuppressAllWarnings = true; } else { int suppressWarning = Convert.ToInt32(paramArg, CultureInfo.InvariantCulture.NumberFormat); if (0 >= suppressWarning) { this.messageHandler.Display(this, WixErrors.IllegalSuppressWarningId(paramArg)); } this.messageHandler.SuppressWarningMessage(suppressWarning); } } catch (FormatException) { this.messageHandler.Display(this, WixErrors.IllegalSuppressWarningId(paramArg)); } catch (OverflowException) { this.messageHandler.Display(this, WixErrors.IllegalSuppressWarningId(paramArg)); } } else if ("wxall" == parameter) { this.messageHandler.Display(this, WixWarnings.DeprecatedCommandLineSwitch("wxall", "wx")); this.messageHandler.WarningAsError = true; } else if (parameter.StartsWith("wx", StringComparison.Ordinal)) { string paramArg = parameter.Substring(2); try { if (0 == paramArg.Length) { this.messageHandler.WarningAsError = true; } else { int elevateWarning = Convert.ToInt32(paramArg, CultureInfo.InvariantCulture.NumberFormat); if (0 >= elevateWarning) { this.messageHandler.Display(this, WixErrors.IllegalWarningIdAsError(paramArg)); } this.messageHandler.ElevateWarningMessage(elevateWarning); } } catch (FormatException) { this.messageHandler.Display(this, WixErrors.IllegalWarningIdAsError(paramArg)); } catch (OverflowException) { this.messageHandler.Display(this, WixErrors.IllegalWarningIdAsError(paramArg)); } } else if ("o" == parameter || "out" == parameter) { this.outputFile = CommandLine.GetFile(parameter, this.messageHandler, args, ++i); if (String.IsNullOrEmpty(this.outputFile)) { return; } } else if ("pdbout" == parameter) { this.pdbFile = CommandLine.GetFile(parameter, this.messageHandler, args, ++i); if (String.IsNullOrEmpty(this.pdbFile)) { return; } } else if ("reusecab" == parameter) { this.reuseCabinets = true; } else if ("sa" == parameter) { this.suppressAssemblies = true; } else if ("sf" == parameter) { this.suppressFiles = true; } else if ("sh" == parameter) { this.suppressFileHashAndInfo = true; } else if ("spdb" == parameter) { this.suppressWixPdb = true; } else if ("t" == parameter) { string transform = null; string baseline = null; if (!CommandLine.IsValidArg(args, ++i)) { this.messageHandler.Display(this, WixErrors.BaselineRequired()); return; } baseline = args[i]; transform = CommandLine.GetFile(parameter, this.messageHandler, args, ++i); if (String.IsNullOrEmpty(transform)) { return; } // Verify the transform hasnt already been added. if (this.inputTransforms.ContainsKey(transform)) { this.messageHandler.Display(this, WixErrors.DuplicateTransform(transform)); return; } this.inputTransforms.Add(transform, baseline); this.inputTransformsOrdered.Add(transform); } else if ("v" == parameter) { this.messageHandler.ShowVerboseMessages = true; } else if ("?" == parameter || "help" == parameter) { this.showHelp = true; return; } else { this.unparsedArgs.Add(arg); } } else if ('@' == arg[0]) { this.ParseCommandLine(CommandLineResponseFile.Parse(arg.Substring(1))); } else { if (null == this.inputFile) { this.inputFile = CommandLine.VerifyPath(this.messageHandler, arg); if (String.IsNullOrEmpty(this.inputFile)) { return; } } else { this.unparsedArgs.Add(arg); } } } }