Как запретить Windows кешировать данные Com Class? - PullRequest
25 голосов
/ 17 марта 2010

Windows 7 кэширует некоторую информацию о классе COM. Старые ОС не делали этого. После того, как ОС ищет значение HKCU\Software\Classes\CLSID\{GUID}\LocalServer32, она кэширует значение и больше не ищет его.

Когда мы обновляем наше программное обеспечение, мы помещаем новые обновления в другой каталог, а затем обновляем значение HKCU\Software\Classes\CLSID\{GUID}\LocalServer32, чтобы отразить новый путь. В следующий раз, когда программное обеспечение запустится, оно будет использовать самые последние файлы, если оно работает под более старыми ОС Windows. Однако в Windows 7 он будет продолжать использовать старый файл, пока ОС не будет перезагружена.

Я запустил монитор процессов и обнаружил, что в Windows 7 он больше не читает раздел реестра после первого чтения. В старых ОС он каждый раз читает этот ключ.

У меня вопрос: есть ли способ заставить Windows 7 перечитывать информацию LocalServer32 из куста HKCU каждый раз, когда создается новый объект COM вне процедуры?

Ответы [ 2 ]

2 голосов
/ 21 февраля 2013

Я смог решить эту проблему только ...

1: остановка процесса

2: явная отмена регистрации с использованием regsvr32 библиотеки (или exename / unregserver)

3: регистрация нового компонента

4: Запуск процесса обратно.

Я подозреваю, что эта часть Un Reg не работает для вас. Если вы просто меняете раздел реестра напрямую, вам следует вместо этого вызвать RegSvr32 / u.

Также убедитесь, что новое местоположение каталога является текущим каталогом при вызове RegSvr32.

Обратите внимание, что я всегда останавливал процесс, а затем незарегистрированный, это, вероятно, важная деталь.

1 голос
/ 31 января 2013

Так как это лучший результат в Google для этой узкой проблемы, я подумал, что было бы полезно добавить мой результат устранения неполадок для этой проблемы.

Я нашел этот ответ на SO: C #: Как изменить реестр Windows и немедленно вступить в силу

И связанное решение из этого ответа: Registry Watcher C #

Оба варианта кажутся жизнеспособными для управления измененными ключами без принудительной перезагрузки. Для нас (как и ОП) это было при установке обновлений. Для нас (возможно, в отличие от OP) это нечасто, и мы решили, что усилия по внедрению и тестированию исправления, как описано, перевешивались простым решением, требующим перезагрузки: процесс, который пользователи Windows ожидают при установке программного обеспечения в любом случае.

...