Когда я запускаю команду «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 на самом деле исправит раздел реестра, однако он также обновит файл до оригинала. В моем случае у меня есть новый файл, потому что он был установлен в пакете обновления. Я хочу, чтобы новый файл оставался, и только исправить раздел реестра.