#region Apache License, Version 2.0 // // Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. // #endregion using System; using System.Reflection; using System.Text; using System.Diagnostics; namespace NPanday.Plugin.Launcher { /// /// Description of PluginLauncher. /// public class PluginLauncher { public PluginLauncher() { } [STAThread] static int Main(string[] args) { Console.WriteLine("NPanday: Start Process = " + DateTime.Now); Console.WriteLine(@flattenArgs(args)); String vendor = GetArgFor("vendor", args); String startProcessAssembly = @GetArgFor("startProcessAssembly", args); ProcessStartInfo processStartInfo = null; if(vendor != null && vendor.Equals("MONO")) { processStartInfo = new ProcessStartInfo("mono", startProcessAssembly + " " + @flattenArgs(args)); } else { processStartInfo = new ProcessStartInfo(startProcessAssembly, @flattenArgs(args)); } String version = Assembly.GetExecutingAssembly().GetName().Version.ToString(); processStartInfo.EnvironmentVariables["APPDOMAIN_MANAGER_ASM"] = "NPanday.Plugin, Version="+ version + ", PublicKeyToken=4b435f4d76e2f0e6, culture=neutral"; processStartInfo.EnvironmentVariables["APPDOMAIN_MANAGER_TYPE"] = "NPanday.Plugin.PluginDomainManager"; processStartInfo.UseShellExecute = false; Process p = Process.Start(processStartInfo); p.WaitForExit(); Console.WriteLine("NPanday: End Process = " + DateTime.Now + "; exit code = " + p.ExitCode); return p.ExitCode; } private static string GetArgFor(string name, string[] args) { char[] delim = {'='}; foreach(string arg in args) { string[] tokens = arg.Split(delim); if (tokens[0].Equals(name)) return tokens[1]; } return null; } private static string flattenArgs(string[] args) { StringBuilder stringBuilder = new StringBuilder(); foreach(string arg in args) { //Console.WriteLine("ARG {0}: ", arg); stringBuilder.Append(@"""").Append(@arg).Append(@"""").Append(" "); } return stringBuilder.ToString(); } } }