我编写了一个控制台应用程序,它从我的数据库生成备份,然后将其压缩为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;
}
}
答案 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类来使用流进行压缩。这可能会使事情变得更容易,您不必担心篡改批处理文件。