/// <summary> /// Generates web browser friendly usage documentation for your program and opens it using the local machine's default browser. /// </summary> /// <param name="def">The object that describes your program</param> /// <param name="template">The template to use or null to use the default browser friendly template that's built into PowerArgs</param> /// <param name="outputFileName">Where to save the output (the browser will open the file from here)</param> /// <param name="deleteFileAfterBrowse">True if the file should be deleted after browsing</param> /// <param name="waitForBrowserExit">True if you'd like this method to block until the browser is closed. This only works for browsers that start a new process when opened with a document.</param> /// <returns>The usage document as a string</returns> public static string ShowUsageInBrowser(CommandLineArgumentsDefinition def, string template = null, string outputFileName = null, bool deleteFileAfterBrowse = true, bool waitForBrowserExit = true) { var usage = ArgUsage.GenerateUsageFromTemplate(def, template ?? UsageTemplates.BrowserTemplate); outputFileName = outputFileName ?? Path.GetTempFileName().ToLower().Replace(".tmp", ".html"); Process proc = null; try { File.WriteAllText(outputFileName, usage.ToString()); proc = Process.Start(outputFileName); if (proc != null && waitForBrowserExit) { proc.WaitForExit(); } } finally { if (deleteFileAfterBrowse) { if (File.Exists(outputFileName)) { if (waitForBrowserExit == false || proc == null) { Thread.Sleep(3000); // Gives the browser a few seconds to read the file before deleting it. } File.Delete(outputFileName); } } } return(usage.ToString()); }
public static ConsoleString GetUsage(Type usageTemplateProviderType, CommandLineArgumentsDefinition definition) { if (usageTemplateProviderType.GetInterfaces().Contains(typeof(IUsageTemplateProvider)) == false) { throw new InvalidArgDefinitionException("The UsageTemplateProviderType " + usageTemplateProviderType.FullName + " does not implement " + typeof(IUsageTemplateProvider).Name); } var provider = ObjectFactory.CreateInstance(usageTemplateProviderType) as IUsageTemplateProvider; string template = provider.GetTemplate(); var usage = ArgUsage.GenerateUsageFromTemplate(definition, template); return(usage); }
private static T DoStandardExceptionHandling <T>(ArgException ex, ArgHook.HookContext context, CommandLineArgumentsDefinition definition) where T : class { Console.WriteLine(ex.Message); if (definition.ExceptionBehavior.UsageTemplateFile != null) { var template = File.ReadAllText(definition.ExceptionBehavior.UsageTemplateFile); ArgUsage.GenerateUsageFromTemplate(definition, template).Write(); } else { UsageTemplateProvider.GetUsage(definition.ExceptionBehavior.UsageTemplateProviderType, definition).Write(); } return(CreateEmptyResult <T>(context, ex)); }