C# 在VirtualBox中运行时未还原Firebird数据库

C# 在VirtualBox中运行时未还原Firebird数据库,c#,virtualbox,firebird2.5,C#,Virtualbox,Firebird2.5,我有一个Windows7应用程序,运行在VirtualBox虚拟机中。它用于在使用System.Diagnostics.Process本机运行时还原数据库,但在几个月前停止。这是我的代码: Cursor.Current = Cursors.WaitCursor; bookConn.Close(); // close the connection FbRestore restoreSvc = new FbRestore(); restoreSvc.ConnectionString = "Us

我有一个Windows7应用程序,运行在VirtualBox虚拟机中。它用于在使用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
可能会立即终止,但您需要确保应用程序不会在备份仍在恢复和写入
服务输出时终止


同样值得检查的是,当您运行应用程序时,您是否以管理员身份运行,以确保没有奇怪的Windows权限问题。

您是否尝试在连接字符串中指定主机名(或IP地址!)(
数据源
)?数据源没有位置。。。一切都在连接字符串中,路径是正确的;此外,也没有引发异常。您说的“没有放置
数据源的位置”
“是什么意思?这是一个名称-值属性,您可以在连接字符串中定义,我不知道它是否能解决问题(否则我会给出答案),这是一个疑难解答步骤。不,这没有帮助。。。关于如何以编程方式还原.gbk文件还有其他想法吗?ServiceOutput的事件消息中有什么内容?Firebird将在那里向您显示非常可能的错误。这是Verbose=true的结果;gbak:打开的文件D:\Email Attachments\B2014-maria.gbk FirebirdSql.Data.Common.IscException类型的第一次机会异常发生在FirebirdSql.Data.FirebirdClient.dll中FirebirdSql.Data.Common.IscException类型的第一次机会异常发生在FirebirdSql.Data.FirebirdClient.dll中是否来自电子邮件附件?您是否已检查是否已“取消阻止”该文件?这是整个例外吗,有堆栈跟踪吗?还有,你能检查一下最近你的网络中是否添加了非新机器吗?如果是的话,你能检查你的机器的名称是唯一的吗?不,这不是来自电子邮件附件(我从控制台输出复制了消息);没有异常,没有堆栈跟踪。。。它就是不起作用。机器的名称是唯一的:ROLF-PC。此网络上没有其他计算机。