В этом случае MS забыла реализовать метод close. В самом деле. Хм, да? В общем, установка obj = null не выполняет очистку, такую как операции закрытия.
Когда я столкнулся с этой проблемой, он вызывал объекты MSIDatabase из C #. База данных должна быть закрыта (см. MsiOpenDatabase и MsiCloseHandle ). К сожалению, как вы заметили, MS забыла реализовать Database.Close в COM-объекте, который вы видите. Из C # я смог вызвать Marshal.FinalReleaseComObject , чтобы разблокировать файл.
Мы равномерно отказались от COM-объекта как ненадежного и переключились на p / invoke.
Если jscript - ваш единственный вариант, вы можете продлить сценарии на короткое время - когда они умирают, они освобождают свои дескрипторы. Или вы создаете синглтон для представления объекта. Потенциально, некоторые uberhacker будут знать, как вызвать MsiCloseHandle из jScript, и идентифицировать дескриптор, используемый этим COM-объектом.