我有一个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/

10-13 03:36