Pregunta

Estoy creando un proyecto de instalación de Windows usando Visual Studio 2005.

¿Existe alguna opción para que mi proyecto NO tenga una opción de desinstalación en Agregar o quitar programas?

Uno de mis clientes me ha pedido que haga esto. Aquí está el motivo : porque el instalador es un parche para un programa existente. Después de la desinstalación, el programa ya no funciona porque los archivos parcheados se desinstalan. En lugar de encontrar una manera de restaurar los archivos reemplazados (que no hemos podido hacer con este instalador), nos preguntamos si es posible desactivar la desinstalación.

¿Fue útil?

Solución

Solo necesita configurar ARPSYSTEMCOMPONENT = 1 en la tabla de propiedades del instalador usando Orca (No se puede hacer directamente en Visual Studio por lo que sé)

Esto se usa comúnmente cuando un programa instala dependencias y no desea que el usuario desinstale las dependencias a mano, necesita usar un script de desinstalación específico que haya proporcionado o algo así.

Personalmente, crearía el parche como un parche y evitaría que se desinstale.

También sugiero recoger una copia de La guía definitiva para el instalador de Windows que le dará una explicación sobre cómo, por qué y dónde debe usar trucos como este. Además de darle una buena comprensión de los fundamentos del instalador de Windows y ayudarlo a diseñar un mejor instalador a largo plazo. Todos los ejemplos en el libro usan herramientas gratuitas de Visual Studio + de SDK de Windows Installer.

Editar: El usuario aún tiene el control total para desinstalar a través de MSIEXEC, a través de un acceso directo de desinstalación personalizado que usted proporciona, todo lo que hace es ocultar la entrada en Agregar o quitar programas (ARP)

Edit2: VBS de muestra para agregar la propiedad (si desea hacerlo como parte de un proceso de compilación automatizado)

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

Otros consejos

Puede haber, pero para ser honesto, esa es una idea horrible, horrible. No es su decisión decirle a un usuario lo que puede y no puede hacer con su máquina.

Y si el usuario no debería tener la capacidad de hacerlo, entonces eso generalmente lo determina un administrador y el usuario no tiene derecho a desinstalar nada en virtud de su tipo de cuenta, lo cual, nuevamente, no es algo que usted debería tener influencia en.

No sabes quiénes son sus " usuarios " son. Esto puede no ser para el software del usuario final en absoluto. Escribimos una gran cantidad de software personalizado que está instalado en un NOC; no pone ninguna información de desinstalación en agregar / quitar. (Estamos utilizando NSIS de Nullsoft y no el instalador de Visual Studio, por cierto ...)

Es demasiado tonto decir algo como "Esta es siempre una idea horrible". Hay muchos casos en el software moderno donde la desinstalación de dependencias puede ser verdadera y completa para la máquina en cuestión.

Los ideales de software de código abierto solo son útiles para las personas que QUIEREN poder romper su máquina.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top