Вам просто нужно установить ARPSYSTEMCOMPONENT = 1 в таблице свойств установщика, используя Orca (Насколько я знаю, это невозможно сделать непосредственно в Visual Studio)
Это обычно используется, когда программа устанавливает зависимости, и вы не хотите, чтобы пользователь удалял зависимости вручную, им нужно использовать конкретный сценарий удаления, который вы предоставили, или что-то в этом роде.
Лично я бы создал патч как патч и предотвратил удаление патча.
Также я предлагаю взять копию Полного руководства по установщику Windows, который даст вам некоторое объяснение того, как, почему и где вы должны использовать такие уловки, как этот. А также даст вам действительно хорошее представление о принципах работы установщика Windows и поможет вам в конечном итоге разработать лучший установщик. Во всех примерах в книге используется Visual Studio + бесплатные инструменты из SDK установщика Windows.
Изменить: пользователь по-прежнему имеет полный контроль над удалением через MSIEXEC с помощью настраиваемого ярлыка удаления, который вы предоставляете, все это скрывает запись в «Установка и удаление программ» (ARP).
Edit2: образец VBS для добавления свойства (если вы хотите сделать это как часть процесса автоматической сборки)
Dim installer, database, view
Set installer = CreateObject("WindowsInstaller.Installer")
Set database = installer.OpenDatabase ("test.msi", 1)
Set view = database.OpenView ("INSERT INTO Property(Property.Property, Property.Value) VALUES('ARPSYSTEMCOMPONENT', '1')")
view.Execute
Set database = Nothing
Set installer = Nothing
person
saschabeaumont
schedule
20.01.2009