Скрыть деинсталлятор в Установка и удаление программ - PullRequest
5 голосов
/ 20 января 2009

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

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

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

Ответы [ 4 ]

8 голосов
/ 21 января 2009

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

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

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

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

Редактировать: Пользователь по-прежнему имеет полный контроль над удалением через 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
3 голосов
/ 21 января 2009

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

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

2 голосов
/ 12 апреля 2009

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

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

2 голосов
/ 21 января 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...