/// <summary>Entry point</summary> public virtual int Execute(CommandLine cmd, ConfigSource configuration) { Initialize(cmd, configuration); var binary = Paths.Binary(); var proc = new Process(); var runtime = configuration.GetRuntime(); var ini = new Dictionary <string, IEnumerable <string> >() { { "magic_quotes_gpc", new string[] { "0" } }, { "date.timezone", new string[] { TimeZoneInfo.Local.Olson() ?? Environment.GetEnvironmentVariable("TZ") ?? "UTC" } }, { "extension", configuration.GetExtensions(runtime) } }; var use = configuration.GetUse() ?? UseComposer(); Encoding encoding; Func <string, string> args; var main = Paths.TryLocate(use, new string[] { Paths.Compose("tools", MainFor(cmd) + ".php") }).FirstOrDefault(); if (null == main) { main = Paths.Locate(new string[] { Paths.DirName(binary) }, new string[] { MainFor(cmd) + "-main.php" }).First(); // Arguments are encoded in utf-7, which is binary-safe args = Arguments.Encode; encoding = Encoding.UTF8; } else { args = Arguments.Escape; encoding = Encoding.GetEncoding("iso-8859-1"); } var shell = Shell.Parse(configuration.GetExecutable(runtime) ?? (runtime ?? "php")); var dot = new string[] { "." }; proc.StartInfo.UseShellExecute = false; proc.StartInfo.FileName = shell.Executable; proc.StartInfo.Arguments = string.Format( "{1} -C -q -d include_path=\"{2}{0}{0}{3}\" {4} {5} {6}", Paths.Separator, string.Join(" ", shell.Arguments), string.Join(Paths.Separator, dot.Concat(use.Concat(cmd.Path["modules"].Concat(ModulesFor(cmd))))), string.Join(Paths.Separator, dot.Concat(cmd.Path["classpath"].Concat(ClassPathFor(cmd)))), string.Join(" ", IniSettings(ini.Concat(configuration.GetArgs(runtime)))), main, string.Join(" ", ArgumentsFor(cmd).Select(args)) ); var env = proc.StartInfo.EnvironmentVariables; env["XP_EXE"] = binary; env["XP_VERSION"] = Assembly.GetExecutingAssembly().GetName().Version.ToString(); env["XP_MODEL"] = cmd.ExecutionModel.Name; env["XP_COMMAND"] = GetType().Name.ToLower(); return(cmd.ExecutionModel.Execute(proc, encoding)); }
/// <summary>Entry point</summary> public int Execute(CommandLine cmd, ConfigSource configuration) { Initialize(cmd, configuration); var proc = new Process(); var runtime = configuration.GetRuntime(); var ini = new Dictionary <string, IEnumerable <string> >() { { "magic_quotes_gpc", new string[] { "0" } }, { "date.timezone", new string[] { TimeZoneInfo.Local.Olson() ?? "UTC" } }, { "extension", configuration.GetExtensions(runtime) } }; var use = configuration.GetUse() ?? UseComposer(); Encoding encoding; Func <string, string> args; var main = Paths.TryLocate(use, new string[] { Paths.Compose("tools", MainFor(cmd) + ".php") }).FirstOrDefault(); if (null == main) { main = Paths.Locate(new string[] { Paths.Binary().DirName() }, new string[] { MainFor(cmd) + "-main.php" }).First(); encoding = Encoding.UTF8; // Arguments are encoded in utf-7, which is binary-safe args = Arguments.Encode; } else { args = Arguments.Escape; encoding = Encoding.GetEncoding("iso-8859-1"); } proc.StartInfo.UseShellExecute = false; proc.StartInfo.FileName = configuration.GetExecutable(runtime) ?? "php"; proc.StartInfo.Arguments = string.Format( "-C -q -d include_path=\".{0}{1}{0}{0}.{0}{2}\" {3} {4} {5}", Paths.Separator, string.Join(Paths.Separator, use.Concat(cmd.Options["modules"].Concat(ModulesFor(cmd)))), string.Join(Paths.Separator, cmd.Options["classpath"].Concat(ClassPathFor(cmd))), string.Join(" ", IniSettings(ini.Concat(configuration.GetArgs(runtime)))), main, string.Join(" ", ArgumentsFor(cmd).Select(args)) ); return(cmd.ExecutionModel.Execute(proc, encoding)); }
/// <summary>Entry point</summary> public int Execute(CommandLine cmd, ConfigSource configuration) { Initialize(cmd, configuration); var proc = new Process(); var runtime = configuration.GetRuntime(); var ini = new Dictionary<string, IEnumerable<string>>() { { "magic_quotes_gpc", new string[] { "0" } }, { "date.timezone", new string[] { TimeZoneInfo.Local.Olson() ?? "UTC" } }, { "extension", configuration.GetExtensions(runtime) } }; var use = configuration.GetUse() ?? UseComposer(); Encoding encoding; Func<string, string> args; var main = Paths.TryLocate(use, new string[] { Paths.Compose("tools", MainFor(cmd) + ".php") }).FirstOrDefault(); if (null == main) { main = Paths.Locate(new string[] { Paths.Binary().DirName() }, new string[] { MainFor(cmd) + "-main.php" }).First(); encoding = Encoding.UTF8; // Arguments are encoded in utf-7, which is binary-safe args = Arguments.Encode; } else { args = Arguments.Escape; encoding = Encoding.GetEncoding("iso-8859-1"); } proc.StartInfo.UseShellExecute = false; proc.StartInfo.FileName = configuration.GetExecutable(runtime) ?? "php"; proc.StartInfo.Arguments = string.Format( "-C -q -d include_path=\".{0}{1}{0}{0}.{0}{2}\" {3} {4} {5}", Paths.Separator, string.Join(Paths.Separator, use.Concat(cmd.Options["modules"].Concat(ModulesFor(cmd)))), string.Join(Paths.Separator, cmd.Options["classpath"].Concat(ClassPathFor(cmd))), string.Join(" ", IniSettings(ini.Concat(configuration.GetArgs(runtime)))), main, string.Join(" ", ArgumentsFor(cmd).Select(args)) ); return cmd.ExecutionModel.Execute(proc, encoding); }