2010-03-05 18 views
5

¿Cómo se detecta que la instalación se está ejecutando en modo silencioso?Detectar la instalación silenciosa en .NET Acción personalizada

Tengo una aplicación personalizada que he agregado un proyecto de configuración .msi. Ejecuto el archivo .msi con el modificador/qb, y en mi código de instalador personalizado C# me gustaría poder detectar esto.

Editar: nobugs dice que para probar la propiedad UILevel. ¿Cómo accedo a la propiedad UILevel de una clase derivada de la clase System.Configuration.Install.Installer?

+0

¿Qué estás instalando? DO#? Aplicación personalizada? –

+0

Edité la pregunta para indicar que es una aplicación personalizada que agregué un proyecto de configuración para crear el instalador .msi. –

Respuesta

10

la indirecta de nobugz, hice lo siguiente:

  1. En la vista de acciones personalizadas del proyecto de instalación .msi, he añadido lo siguiente a mi CustomActionData (para pasar el UILevel a través de mi costumbre instalador):

    /UILevel = "[UILevel]"

  2. Dentro de mi código C# para el código derivado de instalador clase base, que añade código para obtener el valor:

    cadena uiLevelString = Context.Parameters ["UILevel"];

  3. Fue entonces simple analizar la cadena para un valor int. Si el valor es < = 3, se trata de una instalación silenciosa.

+1

¿podría detallar en el paso 2? ¿Dónde escribe exactamente ese código, en qué evento de la clase derivada? Gracias de antemano –

+1

@Andrei Cristof En el paso 2, hice una anulación del método "Instalar". –

0

Primero me gustaría señalar que InstallUtil es un patrón muy malo. Se les acaba el proceso, tatoo el proceso con una versión CLR y cuando fallan, generan un cuadro de diálogo modal de error 1001 incluso durante una instalación silenciosa.

En su lugar, debe utilizar el patrón DTF de WiX.

MsiGetMode (Session.Mode) está limitado durante la ejecución diferida, por lo que tendrá que serializar y deserializar el UILevel.

http://www.msifaq.com/a/1044.htm

Cuestiones relacionadas