Рассмотрим следующее:
Я использую VS2010 для создания 32-битной службы Windows на C # .NET (target = x86, framework = 4.0) и соответствующего проекта установки (.msi).
Моим разработчиком является 32-битный Widnows XP Professional SP3.
У меня есть особая потребность: я должен иметь возможность программно удалить мой сервис из отдельного 32-битного приложения. Для этой цели удаляемое приложение должно знать код продукта установленной службы, когда необходимо выполнить удаление (чтобы иметь возможность вызвать «msiexec.exe / uninstall»).
Я решил эту проблему, позволив 32-разрядному приложению удаления найти в реестре установленные компоненты, пока оно не наткнется на то, которое соответствует имени моих служб, и затем выберет соответствующий код продукта. Это очень просто и отлично работает.
Сегодня я попытался установить свою службу на 64-разрядной Windows 7. Служба работает нормально, но когда дело доходит до удаления, мое 32-разрядное приложение удаления больше не может найти код продукта в реестре. Это связано с тем, что 32-разрядное приложение-деинсталлятор может видеть только перенаправленную (wow6432node) часть реестра, в то время как информация об установке (по неизвестным причинам) была помещена в исходную неориентированную часть.
Как я могу решить эту проблему?
Могу ли я заставить установщик поместить информацию об установке в перенаправленную часть реестра?
Могу ли я получить доступ и отсканировать часть ненаправленного реестра из моего 32-разрядного приложения удаления?
Могу ли я - во время установки - каким-либо образом получить код продукта и сохранить его в другом месте (доступном из моего 32-разрядного деинсталлятора)?
Есть ли другой способ получения кода продукта, который не включает поиск в реестре?