using System; using System.Collections.Specialized; using System.Globalization; using System.IO; using System.Text; namespace ZeroLevel.Services.AsService { public class InstallContext { private StringDictionary parameters; public StringDictionary Parameters => this.parameters; public InstallContext() : this(null, null) { } public InstallContext(string logFilePath, string[] commandLine) { this.parameters = InstallContext.ParseCommandLine(commandLine); if (this.Parameters["logfile"] == null && logFilePath != null) { this.Parameters["logfile"] = logFilePath; } } public bool IsParameterTrue(string paramName) { string text = this.Parameters[paramName.ToLower(CultureInfo.InvariantCulture)]; if (text == null) { return false; } if (string.Compare(text, "true", StringComparison.OrdinalIgnoreCase) != 0 && string.Compare(text, "yes", StringComparison.OrdinalIgnoreCase) != 0 && string.Compare(text, "1", StringComparison.OrdinalIgnoreCase) != 0) { return "".Equals(text); } return true; } public void LogMessage(string message) { try { this.LogMessageHelper(message); } catch (Exception) { try { this.Parameters["logfile"] = Path.Combine(Path.GetTempPath(), Path.GetFileName(this.Parameters["logfile"])); this.LogMessageHelper(message); } catch (Exception) { this.Parameters["logfile"] = null; } } if (!this.IsParameterTrue("LogToConsole") && this.Parameters["logtoconsole"] != null) { return; } Console.WriteLine(message); } internal void LogMessageHelper(string message) { StreamWriter streamWriter = null; try { if (!string.IsNullOrEmpty(this.Parameters["logfile"])) { streamWriter = new StreamWriter(this.Parameters["logfile"], true, Encoding.UTF8); streamWriter.WriteLine(message); } } finally { if (streamWriter != null) { streamWriter.Close(); } } } protected static StringDictionary ParseCommandLine(string[] args) { StringDictionary stringDictionary = new StringDictionary(); if (args == null) { return stringDictionary; } for (int i = 0; i < args.Length; i++) { if (args[i].StartsWith("/", StringComparison.Ordinal) || args[i].StartsWith("-", StringComparison.Ordinal)) { args[i] = args[i].Substring(1); } int num = args[i].IndexOf('='); if (num < 0) { stringDictionary[args[i].ToLower(CultureInfo.InvariantCulture)] = ""; } else { stringDictionary[args[i].Substring(0, num).ToLower(CultureInfo.InvariantCulture)] = args[i].Substring(num + 1); } } return stringDictionary; } } }