Скрыть деинсталлятор в разделе Установка и удаление программ?
-
19-08-2019 - |
Вопрос
Я создаю проект установщика 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 ...)
Слишком глупо говорить что-то вроде "Это всегда ужасная идея".В современном программном обеспечении есть много случаев, когда удаление зависимостей может привести к истинному и основательному сбою в работе компьютера.
Идеалы программного обеспечения с открытым исходным кодом полезны только для людей, которые ХОТЯТ иметь возможность сломать свою машину.