MSI не ремонтирует определенные разделы реестра

Когда я запускаю команду «msiexec/fm» из командной строки, я заметил, что некоторые ключи реестра HKLM не ремонтируются. То же самое происходит, когда я делаю это на C ++ следующим образом: «MsiReinstallProduct (ProductCode, REINSTALLMODE_REPAIR | REINSTALLMODE_MACHINEDATA);

Ситуация такова. У меня есть COM-библиотека, которая должна быть зарегистрирована. Эта информация CLSID DLL находится в таблице реестра MSI. Во время установки MSI поместит эту информацию в реестр. Если я вручную удалю ключ CLSID и сделаю ремонт «msiexec/fm», тогда раздел реестра будет правильно восстановлен. Если я вручную изменю путь в реестре, который указывает на DLL, то MSI вернет строку обратно к ее исходному значению.

Существует один рабочий процесс, в котором ключ не будет восстановлен. Если я закрою новую версию DLL на компьютере, чтобы заменить ту, которая поставляется с установкой, то MSI больше не будет исправлять ключ CLSID. Это похоже на то, что MSI решает, что этот ключ не следует ремонтировать, поскольку DLL не то же самое. Мне нужен способ заставить MSI восстановить исправление раздела реестра, даже если DLL изменилась.

Команда msiexec/fdm на самом деле исправит раздел реестра, однако он также обновит файл до оригинала. В моем случае у меня есть новый файл, потому что он был установлен в пакете обновления. Я хочу, чтобы новый файл оставался, и только исправить раздел реестра.

1
nl ja de

1 ответы

Я предполагаю, что DLL-файл является ключевым элементом в компоненте, который содержит ключи реестра. По умолчанию компонент не переустанавливается, если отсутствует ключевой элемент. Вы должны указать еще несколько флагов, чтобы обеспечить переустановку компонентов. Например./fpem

http://technet.microsoft.com/ ан-нас/библиотека/cc759262 (v = ws.10) .aspx # BKMK_Repair

2
добавлено
Да, ты можешь. Записи реестра могут быть ключевым элементом в компоненте.
добавлено автор Ciprian, источник
Да, вы правы, я могу дать такие опции, как/fdm, и ключ будет восстановлен. У меня есть требование не переустанавливать файлы из исходного .msi-файла. Если я дам варианты, как тот, который вы предлагаете, файл будет перезаписан, но это не то, что я хочу. В этом случае машина имеет новую dll, потому что dll была доставлена ​​в Service Pack (в основном просто перезапись оригинала). Я хочу, чтобы новый файл оставался, но обновлен поврежденный путь реестра. Я обновлю свой вопрос выше.
добавлено автор user1882841, источник
Могу ли я разделить реестр и файл в файле .msi на разные компоненты в .msi? Если бы я сделал это, я мог ожидать, что ключ будет восстановлен, даже если файл все еще существует?
добавлено автор user1882841, источник
Про Windows
Про Windows
941 участник(ов)

Microsoft Windows и всё, что с этим связано. Список интересных групп и каналов: https://github.com/goq/telegram-list

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot