Я делаю службу адаптера данных, и мне нужно сделать резервную копию уязвимых таблиц, прежде чем связываться с данными. Я использую вызов внешнего процесса «mysqldump.exe», и все отлично работает из командной строки - но служба выдает ошибку нулевой ссылки при запуске резервного копирования.
Как вы можете видеть в коде, я очень старался точно определить, где происходит ошибка (исключение перехватывается и записывается в журнал приложений Windows на уровне моего контроллера), но ни одно из моих собственных исключений не выдается, так что в итоге я не мудрый.
здесь мы идем:
public static string Backup(string host, string database, string dbUser, string dbPwd, string[] tables, string OutputFile, out bool succes, string fileRoot)
{
Process myProcess = new Process();
int debug = 0;
try
{
myProcess.StartInfo.FileName = fileRoot + "Backup\\mysqldump.exe";
debug++;
myProcess.StartInfo.UseShellExecute = false;
debug++;
myProcess.StartInfo.CreateNoWindow = true;
debug++;
myProcess.StartInfo.RedirectStandardOutput = true;
debug++;
myProcess.StartInfo.RedirectStandardError = true;
debug++;
succes = false;
}
catch
{
throw new Exception("BackupMetoden blev afbrud ved en fejl under instantieringen af mysqldump.exe\r\n\r\nDebug niveau: " + debug);
}
//Rediger Arguments
debug = 0;
string output = "";
try
{
string args = "-h " + host + " " + database + " --tables #TABELLER#" + "--user=" + dbUser + " --password=" + dbPwd + " --result-file " + OutputFile;
debug++;
string tabeller = "";
debug++;
foreach (string t in tables)
{ tabeller += t + " "; }
debug++;
args = args.Replace("#TABELLER#", tabeller);
debug++;
myProcess.StartInfo.Arguments = args;
debug++;
output = "Ingen backup udført - der er sket en fejl";
}
catch(Exception ex)
{
throw new Exception("BackupMetoden blev afbrud ved en fejl under samling af kommando-syntaks\r\n" + ex.Message + "\r\nDebug niveau: " + debug);
}
try
{
myProcess.Start();
output = myProcess.StandardError.ReadToEnd();
succes = true;
}
catch(Exception ex)
{
succes = false;
throw new Exception("Der opstod en fejl under backup: " + output + "\r\n" + ex.Message + "\r\n\r\n" + ex.StackTrace);
}
return output;
}
Я точно знаю, что ошибка генерируется в приведенном выше коде, потому что исключение заключено в сообщение вызывающим методом:
try
{
resultat = VDB_MysqlBackupRestore.Backup(indstillinger.Host(kilde), indstillinger.DB(kilde), indstillinger.User(kilde), indstillinger.Pass(kilde), tables, outputFile, out succes, rodmappe);
return resultat;
}
catch (Exception backupfejl)
{
throw new Exception("Der opstod fejl under uførelsen af backup i controller-laget: " + backupfejl.Message);
}
... И в журнале приложений появляется сообщение об упаковке:
Оперативное резервное копирование в резервном хранилище и резервное копирование i controller-laget: Ссылка на объект не установлена для экземпляра объекта.
Я создаю его в Visual Studio 2010 на Windows 7 32-битной версии. Он был протестирован как локально, так и на веб-сервере Windows 2008 с тем же результатом. Я использую .net 4 Framework