CSV ファイルを使用する差し込み印刷プロセスを自動化しています。このプロセスの一部として、データベース (OpenOffice ODB ファイル) を作成し、これをデータソースとして登録する必要があります。データベースを削除しようとすると、「ファイルを削除できません: 別の人またはプログラムによって使用されています」という例外が発生します。問題は、OpenOffice プロセスがこのリソースを (強制終了せずに) 解放できないことです。私の現在のコードは次のとおりです。
public string DeleteDatasource(string datasourceName)
{
string result = string.Empty;
object databaseContext = _MultiServiceFactory.createInstance("com.sun.star.sdb.DatabaseContext");;
try
{
XDatabaseRegistrations databaseRegistrations = (XDatabaseRegistrations)databaseContext;
if(databaseRegistrations.hasRegisteredDatabase(datasourceName))
{
/* //attempt one
XNameAccess nameAccess = (XNameAccess)OODatabaseContext;
object datasource = nameAccess.getByName(datasourceName);
XNamingService namingservice = (XNamingService)OODatabaseContext;
namingservice.revokeObject(datasourceName);
*/
//attempt 2
string databaseLocation = databaseRegistrations.getDatabaseLocation(datasourceName);
databaseRegistrations.revokeDatabaseLocation(datasourceName);
if (!String.IsNullOrEmpty(databaseLocation))
try
{
//As File Path converts the uno file string into a standard form i.e. "file:///c:/temp/DatabaseFile.odb" to "c:\\temp\\DatabaseFile.odb"
File.Delete(databaseLocation.AsFilepath());
}
catch (System.Exception ex)
{
//some error handling
}
}
return result;
}
catch (System.Exception ex)
{
//More error handling
}
}
ODBを削除できるように、このデータソースの登録を解除する方法についてのアイデア。ありがとう