private static bool IsFileRegisteregAndRelevantMd5(string fileName) { DataSet ds = SqlWorks.ExecProc("GetOperationTypeByFileName", fileName); if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0) { return(false); } else { string dllFullPath = Path.Combine(MainSettings.GlobalSettings.SelfUpdateFtpPath , MainSettings.Constants.OPERATION_PLUGIN_DIRECTORY_NAME , fileName); var ftpFileMd5Result = FtpWorks.GetFtpFileMd5(MainSettings.GlobalSettings.SelfUpdateFtpServer , MainSettings.GlobalSettings.SelfUpdateFtpUser , MainSettings.GlobalSettings.SelfUpdateFtpPassword , Path.Combine(MainSettings.GlobalSettings.SelfUpdateFtpPath, MainSettings.Constants.OPERATION_PLUGIN_DIRECTORY_NAME) , fileName); if (ftpFileMd5Result.IsComplete) { try { DataRow dr = ds.Tables[0].Rows[0]; return(MD5Works.CompareHahes(ftpFileMd5Result.Value, Convert.ToString(dr["FileMD5"]))); } catch { return(false); } } else { NLogger.LogErrorToBaseAndHdd(MainSettings.MainSqlSettings?.ComputerId, $"Ошибка получения MD5 файла ({dllFullPath})"); return(false); } } }
public static TryRegisterPlugin RegisterOrUpdatePluginMd5(string nameRus, string fileName, int groupId = 1 /*стандартные операции*/, string description = "") { string dllLocalFullPath = Path.Combine(MainSettings.Constants.PluginOperationDllDirectoryPath, fileName); string dllFtpFullPath = Path.Combine(MainSettings.GlobalSettings.SelfUpdateFtpPath , MainSettings.Constants.OPERATION_PLUGIN_DIRECTORY_NAME , fileName); var ftpFileMd5Result = FtpWorks.GetFtpFileMd5(MainSettings.GlobalSettings.SelfUpdateFtpServer , MainSettings.GlobalSettings.SelfUpdateFtpUser , MainSettings.GlobalSettings.SelfUpdateFtpPassword , Path.Combine(MainSettings.GlobalSettings.SelfUpdateFtpPath, MainSettings.Constants.OPERATION_PLUGIN_DIRECTORY_NAME) , fileName); if (ftpFileMd5Result.IsComplete) { try { string ftpFileMd5 = ftpFileMd5Result.Value; DataSet ds = SqlWorks.ExecProc("GetOperationTypeByFileName", fileName); if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0) { //Регистрируем //Актуализируем файл из фтп, если нужно var res = GetOrUpdateFileFromFtpMd5(fileName, null); if (!res.IsComplete) { return(new TryRegisterPlugin(false, $"Ошибка скачивания файла ({fileName}) с ftp в директорию ({MainSettings.Constants.PluginOperationDllDirectoryPath})")); } else { /* * @Name nvarchar(512) * ,@NameRus nvarchar(512) * ,@GroupId int * ,@FileName nvarchar(510) * ,@FileMD5 nvarchar(64) * ,@Description nvarchar(MAX) */ //Пробуем получить имя типа операции var dllResult = GetFromDll(dllLocalFullPath); if (!dllResult.IsComplete) { return(new TryRegisterPlugin(false, $"Ошибка плучения типа операции из файла ({dllLocalFullPath})")); } SqlWorks.ExecProc("AddOperationType" , dllResult.PluginOperationInstance.SqlName , nameRus , groupId , fileName , null , ftpFileMd5 , description); return(new TryRegisterPlugin()); } } else { DataRow dr = ds.Tables[0].Rows[0]; //Обновляем, если нужно if (!MD5Works.CompareHahes(ftpFileMd5, Convert.ToString(dr["FileMD5"]))) { //Актуализируем файл из фтп, если нужно var res = GetOrUpdateFileFromFtpMd5(fileName, Convert.ToString(dr["FileMD5"])); if (!res.IsComplete) { return(new TryRegisterPlugin(false, $"Ошибка скачивания файла ({fileName}) с ftp в директорию ({MainSettings.Constants.PluginOperationDllDirectoryPath})")); } else { var dllResult = GetFromDll(dllLocalFullPath); if (!dllResult.IsComplete) { return(new TryRegisterPlugin(false, $"Ошибка плучения типа операции из файла ({dllLocalFullPath})")); } SqlWorks.ExecProc("UpdateOperationTypeById" , Convert.ToInt32(dr["Id"]) , dllResult.PluginOperationInstance.SqlName , nameRus , groupId , fileName , null , ftpFileMd5 , description); return(new TryRegisterPlugin()); } } return(new TryRegisterPlugin()); } } catch (Exception ex) { return(new TryRegisterPlugin(false, ex.ToString())); } } else { return(new TryRegisterPlugin(false, $"Не удалось получить MD5 файла ({fileName}) по ftp")); } }