/// <summary> /// 读取脚本文件内容 /// </summary> /// <param name="plugin"></param> /// <param name="isPassword"></param> /// <returns></returns> private void ReadScriptContent(AbstractZipPluginInfo plugin, bool isPassword) { //如果未配置脚本文件名 //if (string.IsNullOrWhiteSpace(plugin.ScriptFile)) //{ // throw new Exception("未找到脚本文件!" + plugin.ScriptFile); //} plugin.ScriptObject = string.IsNullOrWhiteSpace(plugin.ScriptFile) ? plugin.ZipTempDirectory : Path.Combine(plugin.ZipTempDirectory, plugin.ScriptFile); //plugin.ScriptObject = FileHelper.FileToUTF8String(plugin.ScriptFile); //if (isPassword) //再次使用DES解密 //{ // plugin.ScriptObject = CryptographyHelper.DecodeDES(plugin.ScriptObject, DesPassword); //} }
private static readonly string DefaultUnrarPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); //默认的临时解压缩路径 /* 脚本文件结构: * * --Android_QQ_5.1.0.zip |--plugin.config (主配置文件,名称固定) |--main.py (主插件,名称固定) |--icon.png (图标,名称固定) |--chalib (数据恢复特征库文件夹) |--其它文件及文件夹 * */ protected override void LoadPlugin(IAsyncProgress asyn) { List <IPlugin> plugins = new List <IPlugin>(); //string dir = SystemContext.Instance.CurLanguage == LanguageType.Cn ? FileHelper.GetPhysicalPath("\\Script\\cn") // : FileHelper.GetPhysicalPath("\\Script\\en"); string dir = FileHelper.GetPhysicalPath("\\Script\\cn"); foreach (var file in FileHelper.GetFiles(dir, new[] { DebugScriptExtension, ReleaseScriptExtension })) { try { bool isPassword = file.Extension.Equals(ReleaseScriptExtension, StringComparison.OrdinalIgnoreCase); //解压缩文件到临时目录 string tmpDir = UnRarFile(file, isPassword); //读取配置文件 AbstractZipPluginInfo pluginInfo = ReadPluginInfo(Path.Combine(tmpDir, PluginConfigFileName)); //读取脚本文件内容 pluginInfo.ZipTempDirectory = tmpDir; ReadScriptContent(pluginInfo, isPassword); //生成插件实例 IPlugin plugin = GetPlugin(pluginInfo); plugin.PluginInfo = pluginInfo; plugins.Add(plugin); } catch (Exception ex) { LoggerManagerSingle.Instance.Warn(ex, string.Format("解析脚本发生异常!脚本文件:{0}", file.FullName)); } } Plugins = plugins; }