Я поддерживаю некоторые скрипты сборки, которые обрабатывают базы данных MSI из файлов Javascript (.js). Код в основном:Javascript MSI automation - закрытие базы данных
{
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);
}
второй OpenDatabase терпит неудачу с постоянно полезными 0x80004005 (E_FAIL), который я предполагаю, потому что первый не закрыт. Однако объект базы данных не имеет близкого метода. Я пробовал oTargetDB = null - ничего не менял.
Что можно сделать, чтобы закрыть базу данных, чтобы я мог открыть ее снова?
Edit:
- Я вижу ручку с открытым использованием Handle.exe от Sysinternals, так что это определенно проблема
- Задержка не помогло (я пытался ждет очень долго, и это Бесполезный «т помощь)
- Короткоживущие сценарий не вариант из-за существующую структуру сценария
- Uber-хакинг выходит за рамки этого исправить
- мне придется уродовать свой код и идти с (псевдо-синглтон) s olution. Blergh.