Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 3
0
        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));
        }