/// <summary> /// 通过plugIn.conf文件获取已安装的插件信息 /// </summary> /// <returns></returns> public List <PlugInInfo> GetLocalPlugIns() { List <PlugInInfo> listLocalPlugInData = new List <PlugInInfo>(); List <VSDT.PlugIns.Config.PlugInStatusList.PlugInStatus> listStatus = PlugInStatusList.LoadConfig().listStatus; //获取所有插件文件 ArrayList listPlugInFiles = UtilityEnvironment.GetPlugInConfigFiles(ConstantString.PlugInConfigFileName); for (int i = 0; i < listPlugInFiles.Count; i++) { PlugInData data = PlugInDataParser.CreatePlugInData(listPlugInFiles[i].ToString()); PlugInInfo info = new PlugInInfo(); info.PlugInData = data; info.FilePath = data.FilePath; if (listStatus.Count > 0) { info.PlugInState = listStatus.Single(t => t.path == info.FilePath).PlugInState; } else { info.PlugInState = data.InitializedState; } listLocalPlugInData.Add(info); } //排序 listLocalPlugInData.Sort(new Comparison <PlugInInfo>(ComparePlugInByStartLevel)); return(listLocalPlugInData); }
public static IPlugIn CreatePlugIn(PlugInData plugInData) { PlugIn plugIn = new PlugIn(Guid.NewGuid()); plugIn.PlugInInfo = new PlugInInfo(plugInData); plugIn.Name = plugInData.Name; plugIn.Location = Common.Utility.UtilityEnvironment.GetPath(plugInData.FilePath); plugIn.StartMode = plugInData.StartMode; plugIn.EnableState = plugInData.InitializedState; plugIn.SymbolicName = plugInData.SymbolicName; plugIn.Version = plugInData.Version; return plugIn; }
public static IPlugIn CreatePlugIn(PlugInData plugInData) { PlugIn plugIn = new PlugIn(Guid.NewGuid()); plugIn.PlugInInfo = new PlugInInfo(plugInData); plugIn.Name = plugInData.Name; plugIn.Location = Common.Utility.UtilityEnvironment.GetPath(plugInData.FilePath); plugIn.StartMode = plugInData.StartMode; plugIn.EnableState = plugInData.InitializedState; plugIn.SymbolicName = plugInData.SymbolicName; plugIn.Version = plugInData.Version; return(plugIn); }
public PlugInInfo(PlugInData data) { this.PlugInData = data; FilePath = data.FilePath; this.PlugInState = data.InitializedState; }
public static PlugInData CreatePlugInData(string path) { PlugInData plugInData = new PlugInData(); if (!File.Exists(path)) { throw new Exception(string.Format("文件{0}不存在", path)); } XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(path); if (string.Compare(xmldoc.DocumentElement.Name, "PlugIn", true) == 0) { plugInData.FilePath = path.Substring(0, path.LastIndexOf("\\")); //读取PlugIn属性 int _count = xmldoc.DocumentElement.Attributes.Count; for (int i = 0; i < _count; i++) { string _name = xmldoc.DocumentElement.Attributes[i].Name.ToLower(); string _value = xmldoc.DocumentElement.Attributes[i].Value; switch (_name) { case "name": plugInData.Name = _value; break; case "symbolicname": plugInData.SymbolicName = _value; break; case "version": plugInData.Version = new Version(_value); break; case "startlevel": int tmp = 50; Int32.TryParse(_value, out tmp); plugInData.StartLevel = tmp; break; case "initializedstate": try{ plugInData.InitializedState = (PlugInEnableState)System.Enum.Parse(typeof(PlugInEnableState), _value); } catch { plugInData.InitializedState = PlugInEnableState.Enable; } break; case "startmode": try { plugInData.StartMode = (StartMode)System.Enum.Parse(typeof(StartMode), _value); } catch { plugInData.StartMode = StartMode.NeedLogin; } break; default: break; } } //读取PlugIn入口点 XmlNode _node = xmldoc.SelectSingleNode("PlugIn/EntryPoint"); if (_node != null) { _count = _node.Attributes.Count; for (int i = 0; i < _count; i++) { string _name = _node.Attributes[i].Name.ToLower(); string _value = _node.Attributes[i].Value; plugInData.EntryPoint = new EntryPointData(_value); } } //读取插件详细描述信息 _node = xmldoc.SelectSingleNode("PlugIn/PlugInInfo"); PlugInInfoData infoData = new PlugInInfoData(); if (_node != null) { _count = _node.Attributes.Count; for (int i = 0; i < _count; i++) { string _name = _node.Attributes[i].Name.ToLower(); string _value = _node.Attributes[i].Value; switch (_name) { case "author": infoData.Author = _value; break; case "description": infoData.Description = _value; break; case "updatelocation": infoData.UpdateLocation = _value; break; default: break; } } } plugInData.PlugInInfo = infoData; //读取运行时dll(exe)全路径 _node = xmldoc.SelectSingleNode("PlugIn/Runtime"); if (_node != null) { foreach (XmlNode item in _node.ChildNodes) { AssemblyData assembly = new AssemblyData(item, plugInData.FilePath); plugInData.Runtime.Assemblies.Add(assembly); } } //读取扩展节点....此处可能有多个Extension XmlNodeList _nodeList = xmldoc.SelectNodes("PlugIn/Extension"); if (_nodeList != null) { for (int i = 0; i < _nodeList.Count; i++) { _node = _nodeList[i]; ExtensionData _extensionData = new ExtensionData(_node); plugInData.Extensions.Add(_extensionData); } } } return(plugInData); }
public static PlugInData CreatePlugInData(string path) { PlugInData plugInData = new PlugInData(); if (!File.Exists(path)) { throw new Exception(string.Format("文件{0}不存在", path)); } XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(path); if (string.Compare(xmldoc.DocumentElement.Name, "PlugIn", true) == 0) { plugInData.FilePath = path.Substring(0, path.LastIndexOf("\\")); //读取PlugIn属性 int _count = xmldoc.DocumentElement.Attributes.Count; for (int i = 0; i < _count; i++) { string _name = xmldoc.DocumentElement.Attributes[i].Name.ToLower(); string _value = xmldoc.DocumentElement.Attributes[i].Value; switch (_name) { case "name": plugInData.Name = _value; break; case "symbolicname": plugInData.SymbolicName = _value; break; case "version": plugInData.Version = new Version(_value); break; case "startlevel": int tmp = 50; Int32.TryParse(_value, out tmp); plugInData.StartLevel = tmp; break; case "initializedstate": try{ plugInData.InitializedState = (PlugInEnableState)System.Enum.Parse(typeof(PlugInEnableState), _value); } catch { plugInData.InitializedState = PlugInEnableState.Enable; } break; case "startmode": try { plugInData.StartMode = (StartMode)System.Enum.Parse(typeof(StartMode), _value); } catch { plugInData.StartMode = StartMode.NeedLogin; } break; default: break; } } //读取PlugIn入口点 XmlNode _node = xmldoc.SelectSingleNode("PlugIn/EntryPoint"); if (_node != null) { _count = _node.Attributes.Count; for (int i = 0; i < _count; i++) { string _name = _node.Attributes[i].Name.ToLower(); string _value = _node.Attributes[i].Value; plugInData.EntryPoint = new EntryPointData(_value); } } //读取插件详细描述信息 _node = xmldoc.SelectSingleNode("PlugIn/PlugInInfo"); PlugInInfoData infoData = new PlugInInfoData(); if (_node != null) { _count = _node.Attributes.Count; for (int i = 0; i < _count; i++) { string _name = _node.Attributes[i].Name.ToLower(); string _value = _node.Attributes[i].Value; switch (_name) { case "author": infoData.Author = _value; break; case "description": infoData.Description = _value; break; case "updatelocation": infoData.UpdateLocation = _value; break; default: break; } } } plugInData.PlugInInfo = infoData; //读取运行时dll(exe)全路径 _node = xmldoc.SelectSingleNode("PlugIn/Runtime"); if (_node != null) { foreach (XmlNode item in _node.ChildNodes) { AssemblyData assembly = new AssemblyData(item, plugInData.FilePath); plugInData.Runtime.Assemblies.Add(assembly); } } //读取扩展节点....此处可能有多个Extension XmlNodeList _nodeList = xmldoc.SelectNodes("PlugIn/Extension"); if (_nodeList != null) { for (int i = 0; i < _nodeList.Count; i++) { _node = _nodeList[i]; ExtensionData _extensionData = new ExtensionData(_node); plugInData.Extensions.Add(_extensionData); } } } return plugInData; }