Скрыть деинсталлятор в Установка и удаление программ?

Я создаю проект Windows Installer с использованием Visual Studio 2005.

Есть ли возможность сделать так, чтобы в моем проекте НЕ было опции удаления в "Установка и удаление программ"?

Один из моих клиентов попросил меня сделать это.. Вот почему: потому что установщик - это патч для существующей программы. После удаления программа больше не работает, поскольку исправленные файлы удаляются. Вместо того, чтобы найти способ восстановить замененные файлы (что мы не смогли сделать с помощью этого установщика), мы задаемся вопросом, возможно ли отключить удаление.

4 ответа

Решение

Вам просто нужно установить 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

Может быть, но, если честно, это ужасная, ужасная идея. Вы не должны говорить пользователю, что он может и не может делать со своей машиной.

И если у пользователя не должно быть возможности сделать это, то это обычно определяется администратором, и пользователю не предоставляется право деинсталлировать что-либо в силу типа его учетной записи, что опять-таки не является тем, на что вы должны оказывать влияние. на.

Слишком глупо говорить что-то вроде "Это всегда ужасная идея". В современном программном обеспечении есть много случаев, когда удаление зависимостей может быть истинным и полностью под рукой.

Идеалы ПО с открытым исходным кодом полезны только для людей, которые ХОТЯТ иметь возможность сломать свою машину.

Вы не знаете, кто его "пользователи". Это может быть не для программного обеспечения конечного пользователя вообще. Мы пишем много пользовательских программ, которые устанавливаются в NOC; он не помещает информацию об удалении в add/remove. (Мы используем NSIS от Nullsoft, а не установщик Visual Studio, кстати...)

Другие вопросы по тегам