在Windows 2008中安排我的应用程序

时间:2009-11-11 12:25:23

标签: c# windows windows-server-2008

我编写了一个控制台应用程序,它从我的数据库生成备份,然后将其压缩为rar文件。 它工作正常,除非它在Windows 2008中安排。 在Windows运行我的应用程序之后,它说它完全运行。 但它不会压缩我的文件。它只为我生成备份。 顺便说一下窗户 windows ** server 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 :(得分:0)

您在运行任务的帐户是什么?该帐户需要在其路径中使用winrar。

您可以在发布之前将路径发送到批处理文件中和/或以某种方式在C#代码中解析路径。

如果您不打算这样做,至少应该替换

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

with:

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

此外,不是生成批处理文件来调用winrar并调用它,而是可以删除间接并直接执行此操作 - 批处理文件中没有错误检查,并且由于没有异常处理而引入它通常很麻烦。 (我会用PS来做这个,但那是另一天的另一个故事......)

您是否尝试在代码中加入System.Diagnostics.Debugger.Break()并进行调试?

答案 1 :(得分:0)

它必须是WinRar文件吗?您可以使用.NET中已存在的GZipStream和DeflateStream类来使用流进行压缩。这可能会使事情变得更容易,您不必担心篡改批处理文件。