Наши продавцы установили собственное приложение, которое использует несколько пользовательских COM-объектов /DLL, хранящихся в System32. Я пытался заменить одну из этих библиотек DLL более новой версией, которая прекрасно работает после установки, но не после перезагрузки.
Вот интересная часть.
- Я отменяю регистрацию старой DLL с помощью regsvr32 /u myDll.dll
- Regsvr32 показывает диалог, указывающий на успех.
- Я копирую старую DLL в папку "save" и переименовываю ее в 20110412-myDll.dll_.
- Я удаляю оригинал из system32.
- Я поставил новую DLL в system32.
- Зарегистрируйте новый dll с помощью regsvr32 myDll.dll
- Протестируйте новую DLL с VBScript - работает нормально.
- И самое интересное
- Перезагружать.
- Перезапустите тестовый скрипт vb. Это не удается.
- Посмотрите на DLL (которую я заменил) в system32. Он был волшебным образом заменен старой DLL. Я проверил это с помощью
fc
(двоичное сравнение) с system32\myDll.dll и сохраненным 20110412-myDll.dll_. - УДАЛИТЬ старую DLL. Убедитесь, что оно на самом деле прошло.
- Поиск всех дисков для "myDll.DLL ", включая системные папки. Убедитесь, что в папке "save" нет экземпляров старой DLL, кроме переименованной версии.
- перезагружать
- Старая DLL снова волшебным образом появилась.
Учетная запись пользователя, которую я использую для этого, имеет полные права администратора на машину. Я не смог найти ни одного работающего процесса, который должен это делать, и наш ИТ-отдел в замешательстве.
У кого-нибудь есть предложения?
Обновить
Просто, черт возьми, я запустил одну из машин в безопасном режиме, установил новую DLL и снова перезапустил. На этот раз изменение, кажется, сработало, даже после последующего перезапуска. Weird.
Я могу сделать это на других машинах, которые сталкиваются с той же проблемой, и я ожидаю, что это сработает, но я действительно хотел бы знать, в чем проблема. Argh.