Pregunta

¿Cómo podemos mensaje para reiniciar el equipo después de instalar desde dentro de un C# acción personalizada?

Estamos usando VS 2005 del proyecto de instalación para nuestra instalación, y necesitamos programación decide solicitar un reinicio (así que no va a suceder en cada instalación, sólo en algunas).

ACTUALIZACIÓN:Estamos buscando algo que ya está integrado en la MSI acción personalizada del sistema en primer lugar.Si eso no existe, podemos recurrir a reiniciar el PC a nosotros mismos de alguna manera, pero quisiera evitar que.

ACTUALIZACIÓN:Podemos ver donde se puede establecer REBOOT=Fuerza cuando se edita el archivo Msi en Orca, puede modificar estas tablas de una C# acción personalizada en tiempo de ejecución?Podríamos establecer esta reiniciar cada vez, pero que podrían hacer que nuestra configuración molesto (sólo necesitará reiniciar en raras ocasiones).

ACTUALIZACIÓN:Hemos tratado de configuración:

savedState["REBOOT"] = "Force";

Desde dentro de la Instalación() método de nuestra acción personalizada, pero no hubo suerte.Parece que no IDictionary, savedState realmente no hace nada.

También trató de:

Context.Parameters["REBOOT"] = "Force";

Pero creo que esta colección es sólo la línea de comandos de argumentos que se pasan a la acción personalizada.

ACTUALIZACIÓN:Hay una forma de editar nuestro archivo MSI con Orca para hacer este truco funcione?Tal vez programar un reinicio en una condición de algunos de archivo existente?No hemos encontrado cómo establecer MSI propiedades de un C# acción personalizada.

ACTUALIZACIÓN:Tratamos de enlazar en el dominio de aplicación.ProcessExit y dominio de aplicación.DomainUnload y empezar un nuevo hilo y el Proceso de llamada.GetCurrentProcess().WaitForExit() y ninguno de los eventos de fuego de dentro de un C# acción personalizada...

¿Fue útil?

Solución 2

Como parece, la única forma de resolver esto es para:

A) Modifique el MSI con ORCA para que la configuración se reinicie para cada instalación

B) Rehacer el proyecto de configuración con WIX o Install Shield

Gracias por la ayuda chicos.

Otros consejos

Debe agregar o llamar al msi personalizado SchedulerRereboot http://msdn.microsoft.com/en-us/library/aa371527(vs.85).aspx En su InstallexCutesequence ,. Puede hacer esto utilizando la función msi msidoaction, http://msdn.microsoft.com/en-us/library/aa370090(vs.85).aspx Dentro de una acción personalizada. Tenga en cuenta que la acción personalizada que programa esta debe ser una acción personalizada inmediata, no una acción personalizada diferida. Esto significa que probablemente deberá programarlo después de installFinalize. También puede agregarlo a InstallexCutesequence con una condición en una propiedad pública que establece su acción personalizada.

Cuando tuve que hacer esto antes de usar una función API WIN32 de User32.Dll, creo que esto fue: ExitWindowsex ()

Lancesc te ha dado la respuesta. Debe ejecutar SchedulerReboot, y la mejor manera de hacerlo es insertarlo en el InstallexCutesequence condicionado por su propia propiedad personalizada que establece dentro de su acción personalizada.

Como mencionas, Wix es el camino a seguir para la flexibilidad futura. WIX ahora también incluye DTF (Implementment Tools Foundation), que es un rico conjunto de bibliotecas de clase .NET que envuelven toda la API de Windows. Puede usar esto para acceder fácilmente a las bases de datos MSI desde C# o para escribir acciones personalizadas de C#. Puedo proporcionar más información sobre esto si es deseable.

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