我有一个Windows 7应用程序,在VirtualBox VM中运行。使用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应用程序还原。任何想法为什么不呢?
最佳答案
在这里扩展我的评论有一些尝试:
首先,要尝试进行一些日志记录,我记得在阅读有关某个“已知”错误的地方时,有时需要强制使用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权限问题。
关于c# - 在VirtualBox中运行时无法还原Firebird数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20887215/