У нас есть MSI (созданный с помощью проекта установки Visual Studio), который регистрирует COM-компонент. При установке все работает нормально, и в конце реестр содержит ключ в разделе HKEY_CLASSES_ROOT для компонента com, ссылающийся на ключ реестра CLSID, указывающий на dll.
У нас есть MSI, созданная в среде CI, которая создает измененную версию MSI при изменении кода. Если я пытаюсь запустить MSI-версию с более высокой версией на компьютере, на котором уже установлен продукт, ключ реестра com-компонента удаляется. Это плохо. Если после этого я снова запускаю msi для восстановления установки, ключ добавляется обратно, и все снова работает нормально.
Есть идеи, что происходит или как это исправить?
Вот некоторая соответствующая (я надеюсь) информация журнала из обновления:
MSI (s) (20:38) [14:43:42:158]: Executing op: RegOpenKey(,Key=X.Validation.ValidationInitializationLogger,,BinaryType=0,)
MSI (s) (20:38) [14:43:42:158]: Executing op: RegAddValue(,Value=X.Validation.ValidationInitializationLogger,)
WriteRegistryValues: Key: \Software\Classes\X.Validation.ValidationInitializationLogger, Name: , Value: X.Validation.ValidationInitializationLogger
MSI (s) (20:38) [14:43:42:158]: Executing op: RegOpenKey(,Key=CLSID\{0E5EA3AC-6F32-3071-BB20- F99DC060C76E}\ProgId,,BinaryType=0,)
MSI (s) (20:38) [14:43:42:158]: Executing op: RegAddValue(,Value=X.Validation.ValidationInitializationLogger,)
WriteRegistryValues: Key: \Software\Classes\CLSID\{0E5EA3AC-6F32-3071-BB20-F99DC060C76E}\ProgId, Name: , Value: X.Validation.ValidationInitializationLogger
MSI (s) (20:38) [14:43:42:158]: Executing op: RegOpenKey(,Key=CLSID\{0E5EA3AC-6F32-3071-BB20- F99DC060C76E}\InprocServer32,,BinaryType=0,)
MSI (s) (20:38) [14:43:42:158]: Executing op: RegAddValue(,Value=mscoree.dll,)
WriteRegistryValues: Key: \Software\Classes\CLSID\{0E5EA3AC-6F32-3071-BB20- F99DC060C76E}\InprocServer32, Name: , Value: mscoree.dll
MSI (s) (20:38) [14:43:42:174]: Executing op: RegAddValue(Name=Class,Value=X.Validation.ValidationInitializationLogger,)
WriteRegistryValues: Key: \Software\Classes\CLSID\{0E5EA3AC-6F32-3071-BB20- F99DC060C76E}\InprocServer32, Name: Class, Value: X.Validation.ValidationInitializationLogger
...
MSI (s) (20:EC) [14:43:43:924]: Executing op: RegRemoveValue(Name=Class,Value=X.Validation.ValidationInitializationLogger,)
RemoveRegistryValues: Key: \Software\Classes\CLSID\{A2C211B7-A4B7-34CB-8996- 98287F881E24}\InprocServer32, Name: Class
MSI (s) (20:EC) [14:43:43:924]: Executing op: RegRemoveValue(Name=ThreadingModel,Value=Both,)
RemoveRegistryValues: Key: \Software\Classes\CLSID\{A2C211B7-A4B7-34CB-8996- 98287F881E24}\InprocServer32, Name: ThreadingModel
MSI (s) (20:EC) [14:43:43:924]: Executing op: RegRemoveValue(Name=CodeBase,Value= [#_18CD862A59400E9C1978B46E816FB049],)
RemoveRegistryValues: Key: \Software\Classes\CLSID\{A2C211B7-A4B7-34CB-8996-98287F881E24}\InprocServer32, Name: CodeBase
MSI (s) (20:EC) [14:43:43:924]: Executing op: RegOpenKey(,Key=X.Validation.ValidationInitializationLogger,,BinaryType=0,)
MSI (s) (20:EC) [14:43:43:924]: Executing op: RegRemoveValue(,Value=X.Validation.ValidationInitializationLogger,)
RemoveRegistryValues: Key: \Software\Classes\X.Validation.ValidationInitializationLogger, Name:
MSI (s) (20:EC) [14:43:43:924]: Executing op: RegOpenKey(,Key=CLSID\{A2C211B7-A4B7-34CB-8996-98287F881E24}\ProgId,,BinaryType=0,)
MSI (s) (20:EC) [14:43:43:924]: Executing op: RegRemoveValue(,Value=X.Validation.ValidationInitializationLogger,)
RemoveRegistryValues: Key: \Software\Classes\CLSID\{A2C211B7-A4B7-34CB-8996-98287F881E24}\ProgId, Name:
MSI (s) (20:EC) [14:43:43:924]: Executing op: RegOpenKey(,Key=CLSID\{A2C211B7-A4B7-34CB-8996-98287F881E24},,BinaryType=0,)
MSI (s) (20:EC) [14:43:43:924]: Executing op: RegRemoveValue(,Value=X.Validation.ValidationInitializationLogger,)
RemoveRegistryValues: Key: \Software\Classes\CLSID\{A2C211B7-A4B7-34CB-8996-98287F881E24}, Name:
MSI (s) (20:EC) [14:43:43:924]: Executing op: RegOpenKey(,Key=X.Validation.ValidationInitializationLogger\CLSID,,BinaryType=0,)
MSI (s) (20:EC) [14:43:43:924]: Executing op: RegRemoveValue(,Value={A2C211B7-A4B7-34CB-8996-98287F881E24},)
RemoveRegistryValues: Key: \Software\Classes\X.Validation.ValidationInitializationLogger\CLSID, Name:
Похоже, что ключи реестра добавляются, а затем удаляются в конце обновления.