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

StackOverflow https://stackoverflow.com/questions/463030

Вопрос

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

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

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

Это было полезно?

Решение

Вам просто нужно установить ARPSYSTEMCOMPONENT=1 в таблице свойств установщика, используя Косатка (Насколько я знаю, это невозможно сделать непосредственно в Visual Studio)

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

Лично я бы написал патч как патч и предотвратил бы удаление патча.

Также я предлагаю взять с собой копию Окончательное руководство по установке Windows который даст вам некоторое объяснение того, как, почему и где вы должны использовать подобные приемы.А также даст вам действительно хорошее представление об основных элементах установщика Windows и поможет вам разработать лучший установщик в долгосрочной перспективе.Во всех примерах в книге используются Visual Studio + бесплатные инструменты из Пакет SDK для установщика Windows.

Редактировать: Пользователь по-прежнему имеет полный контроль над удалением через MSIEXEC, с помощью пользовательского ярлыка удаления, который вы предоставляете, все это скрывает запись в разделе Установка и удаление программ (ARP)

Редактировать 2: Пример 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.(Кстати, мы используем NSS от Nullsoft, а не установщик Visual Studio ...)

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top