планирование моего приложения в Windows 2008 - PullRequest
0 голосов
/ 11 ноября 2009

Я написал консольное приложение, которое создает резервную копию из моей базы данных, а затем сжимает ее в файл rar. он работает нормально, кроме случаев, когда это запланировано в Windows 2008. После того, как Windows запускает мое приложение, оно говорит, что оно работает полностью. но это не сжимает мой файл. это только создает резервную копию для меня. кстати windows это windows ** сервер 2008 ** Вот мой код для преобразования файла резервной копии в файл RAR:

private static void ConvertBackupToRar(string backupFileName)
    {
        Console.WriteLine("Convert Backup to rar file");
        try
        {
            string compressStr = ConfigurationManager.AppSettings["BackupFolderAddress"].Trim() + @"Compress.bat";
            FileInfo fbat = new FileInfo(compressStr);
            StreamWriter fs = fbat.CreateText();
            fs.WriteLine("Winrar a " + backupFileName.Replace(".bak", ".rar") + " " + backupFileName);
            fs.Flush();
            fs.Close();

            System.Threading.Thread.Sleep(5000);
            using (System.Diagnostics.Process process1 = new System.Diagnostics.Process())
            {
                process1.StartInfo.FileName = compressStr;
                process1.Start();
            }
        }
        catch (Exception exp)
        {
            throw exp;
        }
    }

Ответы [ 2 ]

0 голосов
/ 11 ноября 2009

Должен ли это быть файл WinRar? Вы можете использовать классы GZipStream и DeflateStream, которые уже существуют в .NET, чтобы выполнять сжатие для вас с помощью потоков. Это, вероятно, сделает все немного проще, и вам не нужно беспокоиться о фальсификации командного файла.

0 голосов
/ 11 ноября 2009

Под каким аккаунтом вы запускаете задачу? Эта учетная запись должна иметь winrar в своем PATH.

Вы можете передать путь в пакетный файл и / или каким-то образом разрешить путь в своем коде C # до отправки.

Если вы не собираетесь этого делать, вы должны хотя бы заменить

  string compressStr = ConfigurationManager.AppSettings["BackupFolderAddress"].Trim() + @"Compress.bat";      

с:

  string compressStr = Path.Combine(ConfigurationManager.AppSettings["BackupFolderAddress"], @"Compress.bat");

Кроме того, вместо того, чтобы генерировать пакетный файл для вызова winrar и вызывать его, вы можете удалить косвенное обращение и сделать это напрямую - у вас нет проверки ошибок в пакетном файле, и обычно это сложно, поскольку нет обработки исключений. (И я бы использовал PS для этого, но это другая история для другого дня ...)

Вы пытались вставить System.Diagnostics.Debugger.Break() в код и отладить его?

...