我有一个在VirtualBox VM中运行的Windows 7应用程序。它用于在使用System.Diagnostics.Process本机运行时恢复数据库,但几个月前停止了。这是我的代码:
Cursor.Current = Cursors.WaitCursor;
bookConn.Close(); // close the connection
FbRestore restoreSvc = new FbRestore();
restoreSvc.ConnectionString = "User=SYSDBA;Password=masterkey;DataSource=localhost;Database=" + dbPath + ";Pooling=true;";
restoreSvc.BackupFiles.Add(new FbBackupFile(backupFilename, 2048));
restoreSvc.PageSize = 4096;
restoreSvc.Options = FbRestoreFlags.Create | FbRestoreFlags.Replace;
restoreSvc.ServiceOutput += new ServiceOutputEventHandler(ServiceOutput);
restoreSvc.Execute();
Cursor.Current = Cursors.Default;
我可以从命令行恢复,但不能从Windows应用程序中恢复。任何想法为什么不呢?
答案 0 :(得分:0)
扩展我的评论,这里有几件事要尝试:
首先,尝试进行一些日志记录,我记得在某个地方读到一个“已知”的bug,你有时需要强制verbose=true
请尝试使用这段代码:
public void RestoreDatabase(string dbPath)
{
FbRestore restoreSvc = new FbRestore();
restoreSvc.ConnectionString = "User=SYSDBA;Password=masterkey;DataSource=localhost;Database=" + dbPath + ";Pooling=true;";
restoreSvc.BackupFiles.Add(new FbBackupFile(BackupRestoreFile, 2048));
restoreSvc.Verbose = true; // Enable verbose logging
restoreSvc.PageSize = 4096;
restoreSvc.Options = FbRestoreFlags.Create | FbRestoreFlags.Replace;
restoreSvc.ServiceOutput += new ServiceOutputEventHandler(ServiceOutput);
restoreSvc.Execute();
}
private void ServiceOutput(object sender, ServiceOutputEventArgs e)
{
Console.WriteLine(e.Message);
}
然后,这应该有助于了解正在发生的事情,因为你应该开始进行一些记录。 Execute
可能会立即终止,因此您需要确保在备份仍在恢复并写入ServiceOutput
等时,您的应用不会结束。
当您运行应用程序时,您还需要检查是否以管理员身份运行以确保没有奇怪的Windows权限问题。