public void Execute() { if ((Directory.Exists(Path.Combine(backupLocation, "Indexes")) == false) || (Directory.Exists(Path.Combine(backupLocation, "IndexDefinitions")) == false)) { throw new InvalidOperationException(backupLocation + " doesn't look like a valid backup"); } if (Directory.Exists(databaseLocation) && Directory.GetFileSystemEntries(databaseLocation).Length > 0) { throw new IOException("Database already exists, cannot restore to an existing database."); } if (Directory.Exists(databaseLocation) == false) { Directory.CreateDirectory(databaseLocation); } Directory.CreateDirectory(Path.Combine(databaseLocation, "logs")); Directory.CreateDirectory(Path.Combine(databaseLocation, "temp")); Directory.CreateDirectory(Path.Combine(databaseLocation, "system")); CopyAll(new DirectoryInfo(Path.Combine(backupLocation, "IndexDefinitions")), new DirectoryInfo(Path.Combine(databaseLocation, "IndexDefinitions"))); CopyAll(new DirectoryInfo(Path.Combine(backupLocation, "Indexes")), new DirectoryInfo(Path.Combine(databaseLocation, "Indexes"))); JET_INSTANCE instance; Api.JetCreateInstance(out instance, "restoring " + Guid.NewGuid()); try { TransactionalStorage.ConfigureInstance(instance, databaseLocation); Api.JetRestoreInstance(instance, backupLocation, databaseLocation, StatusCallback); var fileThatGetsCreatedButDoesntSeemLikeItShould = new FileInfo(Path.Combine(new DirectoryInfo(databaseLocation).Parent.FullName, new DirectoryInfo(databaseLocation).Name + "Data")); if (fileThatGetsCreatedButDoesntSeemLikeItShould.Exists) { fileThatGetsCreatedButDoesntSeemLikeItShould.MoveTo(Path.Combine(databaseLocation, "Data")); } } finally { Api.JetTerm(instance); } }