Je suis en train de maintenir quelques scripts de construction qui utilisent des bases de données MSI à partir de fichiers Javascript (.js). Le code est essentiellement:Javascript MSI automation - fermeture de la base de données
{
var oTargetDB = g_oInstaller.openDatabase("mymsi.msi", msiOpenDatabaseModeReadOnly);
var oView = oTargetDB.openView(...);
oView.execute();
oView.close();
}
// Later...
{
var oTargetDB = g_oInstaller.openDatabase("mymsi.msi", msiOpenDatabaseModeTransact);
}
La deuxième OpenDatabase échoue avec les 0x80004005 toujours utiles (FAIL), que je suppose est parce que le premier n'est pas fermée. Toutefois, l'objet Database n'a pas de méthode close. J'ai essayé oTargetDB = null - n'a rien changé.
Que puis-je faire pour fermer la base de données, afin de pouvoir l'ouvrir à nouveau?
Edit:
- Je vois la poignée ouverte en utilisant Handle.exe de Sysinternals, il est donc sans aucun doute le problème
- retard n'a pas aidé (j'ai essayé d'attendre pour un temps très long, et il didn « aide t)
- script de courte durée n'est pas une option en raison de la structure de script existant
- Uber-hacking est au-delà de la portée de ce correctif
- Je vais devoir enlaidir mon code et aller avec le (pseudo-singleton) s solution. Blergh.