Exemple #1
0
 public static void Init(ENSource _source, IWin32Window owner)
 {
     try
     {
         Owner = owner;
         clsShowError.Source = _source;
     }
     catch (Exception ex)
     {
         WebErrorLog.ErrorInstence.StartErrorLog(ex);
     }
 }
        public static void AddHandler(string version,
                                      ENSource source, string path, string hardSerial, string username = "******",
                                      string password = "******",
                                      int minutes     = 10, int minSecendsBetweenExeptions = 30)
        {
            if (minSecendsBetweenExeptions <= 60)
            {
                WebErrorLog.MinMinutsBetweenExeptions = 1;
            }
            else
            {
                WebErrorLog.MinMinutsBetweenExeptions = minSecendsBetweenExeptions / 60;
            }
            Username = username;
            Password = password;
            if (inited)
            {
                return;
            }
            inited = true;
            if (string.IsNullOrEmpty(version))
            {
                new ArgumentNullException(nameof(version), "The version can not be null or empty");
            }
            if (path == null)
            {
                new ArgumentNullException(nameof(path), "The path can not be null");
            }
            if (string.IsNullOrEmpty(username))
            {
                new ArgumentNullException(nameof(username), "The username can not be null or empty");
            }
            if (string.IsNullOrEmpty(password))
            {
                new ArgumentNullException(nameof(password), "The password can not be null or empty");
            }

            WebErrorLog.SetMinute(minutes);
            AppDomain.CurrentDomain.UnhandledException +=
                new UnhandledExceptionEventHandler(WebErrorLog.ErrorInstence.UnhandledExceptionLog);
            Source         = source;
            TakeScreenShot = false;
            Path           = path;
            Version        = version;
            Username       = username;
            Password       = password;
            HardSerial     = hardSerial;
            if (_retryThread == null)
            {
                _retryThread = Task.Run(async() => { await retrySend(); });
            }
        }
 public frmSetConnectionString(ENSource source, string defaulConnection)
 {
     try
     {
         InitializeComponent();
         connectionString = defaulConnection;
         _source          = source;
         var cn = new SqlConnection(connectionString);
         dbName = cn.Database;
     }
     catch (Exception ex)
     {
         WebErrorLog.ErrorInstence.StartErrorLog(ex);
     }
 }
Exemple #4
0
        public static async Task <ReturnedSaveFuncInfo> ReStoreStartAsync(string connectionString, ENSource Source, string path = "", bool autoBackup = true)
        {
            var ret = new ReturnedSaveFuncInfo();

            try
            {
                if (string.IsNullOrEmpty(path))
                {
                    var ofd = new OpenFileDialog
                    {
                        Multiselect = false,
                        Filter      = @"Backup Files(*.NPZ;*.NPZ2;*.BAK)|*.NPZ;*.NPZ2;*.BAK",
                        Title       = @"فایل حاوی اطلاعات پشتیبانی نرم افزار را انتخاب نمائید"
                    };

                    if (ofd.ShowDialog() != DialogResult.OK)
                    {
                        ret.AddReturnedValue(ReturnedState.Warning, "بازگردانی اطلاعات توسط کاربر لغو شد. عدم انتخاب آدرس ذخیره سازی فایل.");
                        return(ret);
                    }
                    path = ofd.FileName;
                }

                var backUpVersion   = GetBackUpVersion(connectionString, path);
                var dataBaseVersion = GetDataBaseVersion(connectionString);
                if (backUpVersion > dataBaseVersion)
                {
                    ret.AddReturnedValue(ReturnedState.Error, $@"{backUpVersion} نسخه فایل پشتیبان" + " \r\n" +
                                         $@"{dataBaseVersion} نسخه دیتابیس" + "\r\n" +
                                         "بدلیل بالاتر بودن نسخه پشتیبان نسبت به دیتابیس، امکان بازگردانی وجود ندارد");
                    return(ret);
                }

                SqlConnection.ClearAllPools();
                ret.AddReturnedValue(await DatabaseAction.ReStoreDbAsync(connectionString, path, autoBackup, Source));
            }
            catch (Exception ex)
            {
                WebErrorLog.ErrorInstence.StartErrorLog(ex);
                ret.AddReturnedValue(ex);
            }
            return(ret);
        }
Exemple #5
0
        public static async Task <ReturnedSaveFuncInfo> BackUpStartAsync(string connectionString, ENSource Source, string path = "", Guid?Guid = null, CancellationToken token = default)
        {
            var ret = new ReturnedSaveFuncInfo();

            try
            {
                token.ThrowIfCancellationRequested();
                if (path == "")
                {
                    token.ThrowIfCancellationRequested();
                    var dlg = new SaveFileDialog {
                        Title = @"پشتیبان گیری اطلاعات نوین پرداز"
                    };
                    token.ThrowIfCancellationRequested();
                    var file = Path.GetFileName(System.Reflection.Assembly.GetEntryAssembly()?.Location)
                               ?.Replace(".exe", "__");
                    var d = Calendar.MiladiToShamsi(DateTime.Now).Replace("/", "_");
                    d           += "__" + DateTime.Now.Hour + " - " + DateTime.Now.Minute;
                    file        += d;
                    file         = file.Replace(" ", "");
                    dlg.FileName = file;
                    token.ThrowIfCancellationRequested();
                    dlg.Filter = "*.NPZ2|*.NPZ2";
                    token.ThrowIfCancellationRequested();
                    token.ThrowIfCancellationRequested();
                    if (dlg.ShowDialog() != DialogResult.OK)
                    {
                        ret.AddReturnedValue(ReturnedState.Warning, "لغو  توسط کاربر. عدم انتخاب آدرس ذخیره سازی.");
                        return(ret);
                    }
                    path = dlg.FileName;
                }
                token.ThrowIfCancellationRequested();
                ret.AddReturnedValue(await DatabaseAction.BackupDbAsync(connectionString, Source, path, Guid, token));
            }
            catch (ThreadAbortException ex) { ret.AddReturnedValue(ex); }
            catch (OperationCanceledException ex) { ret.AddReturnedValue(ex); }
            catch (Exception ex)
            {
                WebErrorLog.ErrorInstence.StartErrorLog(ex);
                Finish_Event = true;
                ret.AddReturnedValue(ex);
            }
            return(ret);
        }
        public static async Task <ReturnedSaveFuncInfoWithValue <string> > BackupDbAsync(string connectionString, ENSource source, EnBackUpType type, string path = "")
        {
            var    line         = 0;
            var    res          = new ReturnedSaveFuncInfoWithValue <string>();
            bool   IsAutomatic  = string.IsNullOrEmpty(path);
            string DatabaseName = "";
            var    guid         = Guid.NewGuid();

            try
            {
                OnCreateBackup?.Invoke(null, new CreateBackupArgs()
                {
                    Message = "", State = CreateBackupState.Start
                });

                if (IsAutomatic)
                {
                    path = CreateFileName(connectionString);
                }
                if (!string.IsNullOrEmpty(path) && Directory.Exists(path))
                {
                    //در نرم افزار حسابداری آدرس پوشه پشتیبان گیری اتوماتیک داده شده است
                    //باید فایل پشتیبان در این پوشه ایجاد گردد
                    path        = CreateFileName(connectionString, path);
                    IsAutomatic = true;
                }

                await BackUpLogAsync(guid, type, EnBackUpStatus.Pending, path,
                                     "آغاز فرآیند تهیه فایل پشتیبان");

                //تهیه اولین نسخه بکاپ توسط سرویس اس کیو ال
                var CreateSqlBackuResult = await CreateSqlServerBackupFileAsync(path, connectionString, guid, type);

                DatabaseName = CreateSqlBackuResult.value;
                res.AddReturnedValue(CreateSqlBackuResult);

                var PathForZipDirectory = await Zip.Move2Temp(path, guid, type);

                res.AddReturnedValue(PathForZipDirectory);

                try
                {
                    //please dont remove this try
                    //اگر به خطا خورد باید تابع ادامه پیدا کند و پشتیبان با پسوند .بک تهیه شود
                    res.AddReturnedValue(
                        await CompressFile.CompressFileInstance.CompressFileAsync(PathForZipDirectory.value, path, guid,
                                                                                  type));
                }
                catch (Exception ex)
                {
                    WebErrorLog.ErrorInstence.StartErrorLog(ex);
                    res.AddReturnedValue(ex);
                }
                res.value = path.ToLower().Replace(".npz2", ".np").Replace(".npz", ".np").Replace(".np", ".npz2");

                //بنا به هر دلیلی امکان فشرده کردن فایل وجود نداشته است
                //باید همان بکاپ فشرده نشده به آدرس مقصد درخواستی مشتری متقل گردد
                if (res.HasError)
                {
                    var file = Directory.GetFiles(PathForZipDirectory.value).FirstOrDefault();
                    File.Move(file, path.ToLower().Replace(".npz2", ".np").Replace(".npz", ".np"));
                }

                OnCreateBackup?.Invoke(null,
                                       new CreateBackupArgs()
                {
                    Message = "", State = CreateBackupState.End
                });

                await BackUpLogAsync(guid, type, EnBackUpStatus.Success, path.ToLower(),
                                     "عملیات پشتیبان گیری با موفقیت انجام شد");
            }
            catch (OperationCanceledException ex)
            {
                res.AddReturnedValue(ex);
            }
            catch (Exception ex)
            {
                await BackUpLogAsync(guid, type, EnBackUpStatus.Error, path.ToLower().Replace(".npz2", ".np").Replace(".npz", ".np"),
                                     ex.Message);

                WebErrorLog.ErrorInstence.StartErrorLog(ex, $"Error in Line {line}");
                res.AddReturnedValue(ex);
            }
            finally
            {
                Task.Run(DeleteTempsAsync);
            }
            return(res);
        }
        public static async Task <ReturnedSaveFuncInfo> ReStoreDbAsync(string connectionString, string pathf, bool autoBackup, ENSource Source)
        {
            var ret = new ReturnedSaveFuncInfo();
            var cn  = new SqlConnection();

            try
            {
                GC.Collect();
                SqlConnection.ClearAllPools();

                if (autoBackup)
                {
                    var dir = Application.StartupPath + "\\AradBackUp";
                    if (!Directory.Exists(dir))
                    {
                        Directory.CreateDirectory(dir);
                    }

                    var file = Path.GetFileName(System.Reflection.Assembly.GetEntryAssembly()?.Location)?.Replace(".exe", "__");
                    var d    = Calendar.MiladiToShamsi(DateTime.Now).Replace("/", "_");
                    d    += "__" + DateTime.Now.Hour + " - " + DateTime.Now.Minute;
                    file += d;

                    var filepath = dir + "\\" + file + ".Bak";
                    ret.AddReturnedValue(await BackupDbAsync(connectionString, Source, EnBackUpType.Manual, filepath));
                }

                if (pathf.EndsWith(".NPZ") || pathf.EndsWith(".npz"))
                {
                    var zp = new Zip();
                    pathf = zp.ExtractTempDIR(pathf);
                }
                else if (pathf.EndsWith(".NPZ2") || pathf.EndsWith(".npz2"))
                {
                    try
                    {
                        var zp  = new CompressFile();
                        var res = await zp.ExtractTempDIR(pathf);

                        ret.AddReturnedValue(res);
                        if (res.HasError)
                        {
                            return(ret);
                        }
                        pathf = res.value;
                    }
                    catch
                    {
                        var zp = new Zip();
                        pathf = zp.ExtractTempDIR(pathf);
                    }
                }

                var csb = new SqlConnectionStringBuilder(connectionString);
                var serverConnectionString =
                    connectionString.Replace("Initial Catalog=" + csb.InitialCatalog, "Initial Catalog=");
                cn = new SqlConnection(serverConnectionString)
                {
                    ConnectionString = serverConnectionString
                };
                var cmd        = new SqlCommand("RESTORE DATABASE [dbName] FROM  DISK = N'bkPath' WITH  FILE = 1,  MOVE N'novin' TO N'dbMDFPath',  MOVE N'novin_log' TO N'dbLDFPath',   NOUNLOAD,  REPLACE,  STATS = 5", cn);
                var dbInfo     = new CLSServerDBs(connectionString);
                var backUpInfo = new DataBaseBackUpInfo(pathf, cn.ConnectionString);

                cmd.CommandText = cmd.CommandText.Replace("dbName", csb.InitialCatalog);
                cmd.CommandText = cmd.CommandText.Replace("bkPath", pathf);
                cmd.CommandText = cmd.CommandText.Replace("novin", backUpInfo.LogicalName);
                cmd.CommandText = cmd.CommandText.Replace("novin_log", backUpInfo.LogicalName + "_log.ldf");
                cmd.CommandText = cmd.CommandText.Replace("dbMDFPath", dbInfo.FileName);
                cmd.CommandText =
                    cmd.CommandText.Replace("dbLDFPath", dbInfo.FileName.ToLower().Replace(".mdf", "_log.Ldf"));

                //تایم اوت بالا بردن مجاز است
                cmd.CommandTimeout = 5 * 60 * 1000;//5 minutes

                cn.Open();
                var temp = cmd.CommandText;
                cmd.CommandText = "ALTER DATABASE [" + csb.InitialCatalog + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE";
                cmd.ExecuteNonQuery();

                cmd.CommandText = temp;
                cmd.ExecuteNonQuery();

                // cmd.CommandText = NovinPardaz.Properties.Resources.DatabaseSettings;
                cmd.CommandText = cmd.CommandText.Replace("dbName", csb.InitialCatalog);
                cmd.ExecuteNonQuery();

                cmd.CommandText = "ALTER DATABASE [" + csb.InitialCatalog + "] SET Multi_USER";
                cmd.ExecuteNonQuery();
                cn.Close();

                SqlConnection.ClearAllPools();
                Application.DoEvents();
            }
            catch (SqlException ex)
            {
                WebErrorLog.ErrorInstence.StartErrorLog(ex);
                try { cn.Close(); } catch { }
                ret.AddReturnedValue(ReturnedState.Error, $"حساب کاربری SQL دسترسی به مسیر نصب برنامه ندارد\r\n{ex.Message }//{ex?.InnerException?.Message ?? ""}");
            }
            catch (Exception ex)
            {
                WebErrorLog.ErrorInstence.StartErrorLog(ex);
                try { cn.Close(); } catch { }
                ret.AddReturnedValue(ex);
            }
            Task.Run(() => SetMultiUser(connectionString));
            return(ret);
        }
        public static async Task <ReturnedSaveFuncInfo> BackUpStartAsync(IWin32Window owner, string connectionString, ENSource source, EnBackUpType type, string path = "")
        {
            var ret = new ReturnedSaveFuncInfo();

            try
            {
                if (path == "")
                {
                    var dlg = new SaveFileDialog {
                        Title = @"پشتیبان گیری اطلاعات آراد"
                    };
                    var file = Path.GetFileName(System.Reflection.Assembly.GetEntryAssembly()?.Location)
                               ?.Replace(".exe", "__");
                    var d = Calendar.MiladiToShamsi(DateTime.Now).Replace("/", "_");
                    d           += "__" + DateTime.Now.Hour + " - " + DateTime.Now.Minute;
                    file        += d;
                    file         = file.Replace(" ", "");
                    dlg.FileName = file;
                    dlg.Filter   = "*.NPZ2|*.NPZ2";
                    if (dlg.ShowDialog(owner) != DialogResult.OK)
                    {
                        ret.AddReturnedValue(ReturnedState.Warning, "لغو  توسط کاربر. عدم انتخاب آدرس ذخیره سازی.");
                        return(ret);
                    }
                    path = dlg.FileName;
                }
                ret.AddReturnedValue(await DatabaseAction.BackupDbAsync(connectionString, source, type, path));
            }
            catch (ThreadAbortException ex) { ret.AddReturnedValue(ex); }
            catch (OperationCanceledException ex) { ret.AddReturnedValue(ex); }
            catch (Exception ex)
            {
                WebErrorLog.ErrorInstence.StartErrorLog(ex);
                Finish_Event = true;
                ret.AddReturnedValue(ex);
            }
            return(ret);
        }
        public static async Task <ReturnedSaveFuncInfo> BackupDbAsync(string connectionString, ENSource Source, string path = "", Guid?Guid = null, CancellationToken token = default)
        {
            var    line         = 0;
            var    res          = new ReturnedSaveFuncInfo();
            bool   IsAutomatic  = string.IsNullOrEmpty(path);
            string DatabaseName = "";

            try
            {
                OnCreateBackup?.Invoke(null, new CreateBackupArgs()
                {
                    Message = "", State = CreateBackupState.Start
                });
                token.ThrowIfCancellationRequested();
                DeleteTempFilesToken?.Cancel();

                if (IsAutomatic)
                {
                    path = CreateFileName(connectionString);
                }
                if (!string.IsNullOrEmpty(path) && Directory.Exists(path))
                {
                    //در نرم افزار حسابداری آدرس پوشه پشتیبان گیری اتوماتیک داده شده است
                    //باید فایل پشتیبان در این پوشه ایجاد گردد
                    path        = CreateFileName(connectionString, path);
                    IsAutomatic = true;
                }

                DeleteTempFilesToken?.Cancel();
                token.ThrowIfCancellationRequested();

                //تهیه اولین نسخه بکاپ توسط سرویس اس کیو ال
                var CreateSqlBackuResult = await CreateSqlServerBackupFileAsync(path, connectionString);

                DatabaseName = CreateSqlBackuResult.value;
                res.AddReturnedValue(CreateSqlBackuResult);
                DeleteTempFilesToken?.Cancel();
                token.ThrowIfCancellationRequested();

                var PathForZipDirectory = Zip.Move2Temp(path);
                res.AddReturnedValue(PathForZipDirectory);
                DeleteTempFilesToken?.Cancel();
                token.ThrowIfCancellationRequested();

                try
                {
                    //please dont remove this try
                    //اگر به خطا خورد باید تابع ادامه پیدا کند و پشتیبان با پسوند .بک تهیه شود
                    res.AddReturnedValue(await CompressFile.CompressFileInstance.CompressFileAsync(PathForZipDirectory.value, path, token));
                }
                catch (Exception ex)
                {
                    WebErrorLog.ErrorInstence.StartErrorLog(ex);
                    res.AddReturnedValue(ex);
                }
                res.value = path.ToLower().Replace(".npz2", ".np").Replace(".npz", ".np").Replace(".np", ".npz2");

                //بنا به هر دلیلی امکان فشرده کردن فایل وجود نداشته است
                //باید همان بکاپ فشرده نشده به آدرس مقصد درخواستی مشتری متقل گردد
                if (res.HasError)
                {
                    var file = Directory.GetFiles(PathForZipDirectory.value).FirstOrDefault();
                    File.Move(file, path.ToLower().Replace(".npz2", ".np").Replace(".npz", ".np"));
                }

                OnCreateBackup?.Invoke(null,
                                       new CreateBackupArgs()
                {
                    Message = "", State = CreateBackupState.End
                });
            }
            catch (OperationCanceledException ex)
            {
                res.AddReturnedValue(ex);
            }
            catch (Exception ex)
            {
                WebErrorLog.ErrorInstence.StartErrorLog(ex, $"Error in Line {line}");
                res.AddReturnedValue(ex);
            }
            finally
            {
                DeleteTempFilesToken?.Cancel();
                DeleteTempFilesToken = new CancellationTokenSource();
                Task.Run(() => deleteTempsAsync(DeleteTempFilesToken.Token));
                Task.Run(() => BackupHistory.DeleteOldBackupsAsync());
                Task.Run(() => BackupHistory.SaveAsync(new BackupHistory()
                {
                    Date         = DateTime.Now,
                    Guid         = Guid ?? System.Guid.NewGuid(),
                    IsAutomatic  = IsAutomatic,
                    DatabaseName = DatabaseName,
                    Path         = path,
                    IsSuccess    = !res.HasError,
                    Source       = Source
                }));
            }
            return(res);
        }