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

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

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

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


person jm.    schedule 20.01.2009    source источник
comment
Я думаю, что есть много людей, которые хотели бы знать, почему вы хотите иметь приложение, которое нельзя удалить так же просто, как его можно установить.   -  person Adam Bellaire    schedule 20.01.2009
comment
Согласованный. Я знаю, что я не единственный человек, которого это раздражает.   -  person Brian Rudolph    schedule 20.01.2009
comment
Я не уверен, но вы определенно заставили меня отказаться от его установки.   -  person Brian Kelly    schedule 20.01.2009
comment
Согласитесь с остальными, пожалуйста, не делайте этого (или, по крайней мере, указывайте законную причину)   -  person John Sheehan    schedule 20.01.2009
comment
Плохая, плохая идея. Если вы не пишете вирус / троян. Если да, то дайте нам знать, и я уверен, что тогда вы получите соответствующие ответы.   -  person EBGreen    schedule 21.01.2009
comment
Это простая, задокументированная функция установщика Windows. Почему огромное количество негатива!?! Пользователь все еще может удалить, это просто скрыто от ARP. Блин.   -  person saschabeaumont    schedule 21.01.2009
comment
+1 для баланса. есть (очень редкие) случаи, когда это полезно.   -  person    schedule 02.12.2009


Ответы (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
person saschabeaumont    schedule 20.01.2009
comment
Я просто не понимаю, как изменить таблицу свойств из установщика Visual Studio. - person jm.; 21.01.2009
comment
Отсутствует закрывающая скобка на: Set view = database.OpenView (INSERT INTO Property (Property.Property, Property.Value) VALUES ('ARPSYSTEMCOMPONENT', '1')) - person jm.; 22.01.2009
comment
Также добавьте эту строку перед Set database = Nothing: database.commit () 'Кажется, требуется? - person jm.; 22.01.2009
comment
Мне никогда не была нужна база данных.commit (), я думаю, это требуется только в том случае, если вы изначально открыли транзакцию. - person saschabeaumont; 19.02.2009

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

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

person casperOne    schedule 20.01.2009

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

person Joe    schedule 20.01.2009
comment
Поскольку на самом деле это не ответ на заданный вопрос, вероятно, это должен быть комментарий, а не ответ. - person EBGreen; 21.01.2009
comment
Возможно, но у Джо недостаточно высокой репутации, чтобы оставлять комментарии. - person Chuck Phillips; 21.01.2009

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

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

person Community    schedule 11.04.2009