Ejemplo n.º 1
0
        /// <summary>
        /// Получить диагностический отчет
        /// </summary>
        /// <param name="reportItems">Элементы отчета</param>
        public IFileSystemItem GetDiagnosticReport(DiagnosticReportItems reportItems)
        {
            // формируем имя временного фала отчета
            String repFileName = String.Format("{0}\\report-{1}-{2}.cab", 
                PathHelper.ExecutablePath,
                Settings.Common.PointId,
                Settings.Common.CashNo);

            // создаем объект для упаковки отчета
            using (CabCompressor cabComp = new CabCompressor())
            {
                // инициализируем упаковщик
                cabComp.CabInfo.MaxCabinetSize = Int32.MaxValue;
                cabComp.CabInfo.MaxFolderSize = Int32.MaxValue;
                cabComp.CabInfo.CabPath = Path.GetDirectoryName(repFileName) + "\\";
                cabComp.CabInfo.CabName = Path.GetFileName(repFileName);
                cabComp.UserData = new Object();

                // добавляем копоненты отчета
                // база данных
                if ((reportItems & DiagnosticReportItems.Database) == DiagnosticReportItems.Database)
                    AddToCabinet(cabComp, Settings.Database.DatabaseFile, false, null);
                // логи
                if ((reportItems & DiagnosticReportItems.Logs) == DiagnosticReportItems.Logs)
                {
                    // логи кассовой системы
                    String[] files = Directory.GetFiles(PathHelper.StorageFolder, "*.log");
                    foreach (String fileName in files)
                    {
                        AddToCabinet(cabComp, fileName, false, "logs");
                    }

                    // лог клиента POS Mail
                    String posmailLog = String.Format("{0}\\Почтовый сервер POS Mail\\Client\\POSMailClient.log",
                        Environment.GetEnvironmentVariable("ProgramFiles"));
                    if (File.Exists(posmailLog))
                        AddToCabinet(cabComp, posmailLog, false, "posmail");
                }
                // дамп драйвера ФР
                if ((reportItems & DiagnosticReportItems.FiscalDump) == 
                    DiagnosticReportItems.FiscalDump)
                    AddToCabinet(cabComp, "c:\\fiscal.dmp", false, null);
                // отчет о версиях файлов
                if ((reportItems & DiagnosticReportItems.FileVersions) == 
                    DiagnosticReportItems.FileVersions)
                    AddVersionInfoToCabinet(cabComp);
                // конфигурация системы
                if ((reportItems & DiagnosticReportItems.Settings) == 
                    DiagnosticReportItems.Settings)
                    AddToCabinet(cabComp, PathHelper.SettingsFile, false, null);

                // сохраняем архив
                cabComp.FlushCabinet();
            }

            // возвращаем ссылку на элемент файловой системы отчета
            return FileSystemItem.GetRoot(repFileName, null);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Добавляет файл в архив
        /// </summary>
        /// <param name="cabComp">Компрессор</param>
        /// <param name="fileName">Имя файла</param>
        /// <param name="isTemporary">Является ли файл временным</param>
        /// <param name="folderInCab">Папка в архиве</param>
        private void AddToCabinet(CabCompressor cabComp, String fileName, Boolean isTemporary,
            String folderInCab)
        {
            if (File.Exists(fileName))
            {
                try
                {
                    // имя файла в архиве
                    String nameInCab = isTemporary ?
                        Path.GetFileNameWithoutExtension(fileName) : Path.GetFileName(fileName);

                    // полное имя файла в архиве
                    String fullNameInCab = String.IsNullOrEmpty(folderInCab) ?
                        nameInCab : String.Format("{0}\\{1}", folderInCab, nameInCab);

                    // пытаемся добавить файл в архив
                    cabComp.AddFile(fileName, fullNameInCab, false, FciCompression.MsZip);
                }
                catch (ApplicationException)
                {
                    // проверяем, не является ли файл временным
                    if (isTemporary)
                        // файл является временным
                        // повторная генерация исключения
                        throw;
                    else
                        AddTemporaryToCabinet(cabComp, fileName, folderInCab);
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Добавляет сводный отчет о версиях файлов в архив
        /// </summary>
        /// <param name="cabComp">Компрессор</param>
        private void AddVersionInfoToCabinet(CabCompressor cabComp)
        {
            // формируем имя отчета
            String vInfoReportName = String.Format("{0}\\version.txt", PathHelper.ExecutablePath);
            try
            {
                // открываем файл отчета
                using (StreamWriter sw = new StreamWriter(vInfoReportName,
                    false, Encoding.Default))
                {
                    sw.WriteLine("Папка установки \"Форинт-К\"");
                    AddTreeToFile(sw, CashsystemRoot, true);
                    sw.WriteLine(String.Empty);
                    sw.WriteLine(String.Empty);
                    sw.WriteLine("Системная папка ОС");
                    AddTreeToFile(sw, BplRoot, false);
                }

                // добавляем отчет в архив
                AddToCabinet(cabComp, vInfoReportName, false, null);
            }
            finally
            {
                // проверяем существование отчета о версиях файлов
                if (File.Exists(vInfoReportName))
                    // удаляем отчет
                    File.Delete(vInfoReportName);
            }
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Добавляет в архив временный файл
 /// </summary>
 /// <param name="cabComp">Компрессор</param>
 /// <param name="fileName">Имя оригинального файла</param>
 /// <param name="folderInCab">Папка в архиве</param>
 private void AddTemporaryToCabinet(CabCompressor cabComp, String fileName,
     String folderInCab)
 {
     // файл открыт другим приложением
     // формируем имя временного файла
     String tmpFileName = String.Format("{0}.tmp", fileName);
     try
     {
         // открываем временный файл
         using (FileStream fs = new FileStream(tmpFileName, FileMode.Create,
             FileAccess.Write, FileShare.None))
         {
             // открываем исходный файл
             using (Stream source = GetFile(fileName))
             {
                 // копируем из файла-источника во временный файл
                 Byte[] swap = new Byte[_swapSize];
                 Int32 bytesRead;
                 while (source.Position < source.Length)
                 {
                     bytesRead = source.Read(swap, 0, _swapSize);
                     if (bytesRead > 0)
                         fs.Write(swap, 0, bytesRead);
                 }
             }
         }
         // добавляем в архив временный файл
         AddToCabinet(cabComp, tmpFileName, true, folderInCab);
     }
     finally
     {
         // если временный файл существует
         if (File.Exists(tmpFileName))
             // удаляем его
             File.Delete(tmpFileName);
     }
 }