Pregunta

Tengo un problema aquí con una implementación de MSI en la que estoy trabajando (usando Instalar escudo).Tenemos un programa ejecutándose en segundo plano que debe ejecutarse por usuario y debe iniciarse automáticamente sin la intervención del usuario.

El problema es con Objeto de política de grupo/Directorio Activo (GPO/AD), la aplicación se inicia en el contexto del SISTEMA antes de que alguien inicie sesión en lugar de como el usuario que está a punto de iniciar sesión.La aplicación solo se puede ejecutar una vez por usuario y parece que el proceso del SISTEMA impide que se inicie el proceso del USUARIO.Esto significa que las PC deben reiniciarse dos veces antes de que se pueda implementar el software para los usuarios.¿Cómo podemos detener esto?

Básicamente el flujo de trabajo actual es:

  1. La instalación/actualización se ejecuta...eliminar la aplicación en segundo plano
  2. Instalar nuevos archivos
  3. Aplicación en segundo plano de inicio

Esto funciona para aplicaciones publicadas e interactivas. MSI instalaciones: sólo las aplicaciones "asignadas" parecen tener el problema.Como el paso 3 ocurre en el contexto del SISTEMA en lugar del contexto del usuario :(

Lo ideal sería que el equipo de desarrollo parcheara el archivo EXE para evitar el inicio en el contexto del SISTEMA, pero falta un ciclo de lanzamiento y estoy buscando una solución basada en instalador mientras tanto.

(No sé Installscript...entonces estoy adivinando VBScript es probablemente el camino a seguir si no hay elementos InstallShield nativos que pueda usar).

¿Fue útil?

Solución

Puedes usar el Iniciar sesiónUsuario propiedad de Windows Installer como condición para la acción de iniciar el EXE.

Otros consejos

No confiaría en una propiedad del instalador de Windows para lograr esto.Si entiendo correctamente, desea ejecutar un archivo EXE una vez por usuario, ¿probablemente para configurar los valores predeterminados del usuario?El único momento en el que puedes garantizar que estás en el contexto correcto es cuando el usuario realmente inicia sesión.Con la cantidad de suplantación que se produce estos días en el escenario de implementación promedio, simplemente no confío en nada más que el inicio de sesión de un usuario real como la etapa correcta para ejecutar archivos EXE.

Hay demasiadas fuentes de problemas:bloqueos de permisos y privilegios personalizados, bloqueo de servidores de terminales, redireccionamientos de virtualización, suplantación ejecutada por el sistema de implementación, anulaciones del sistema operativo para escrituras de registro, etc.

Microsoft tiene una función llamada Configuración activa que le permitirá ejecutar "algo ejecutable" una vez por usuario, al iniciar sesión.Puede ser cualquier cosa, desde un script hasta un ejecutable.Vea mi respuesta aquí para más detalles: Actualización del registro de cada perfil en Windows Server 2003

¡AJÁ!Sabía que tenía que haber una solución más limpia...El código en el que estaba trabajando empezaba a parecerse a esto:

On Error Resume Next 
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = 'BackgroundProcess.exe'")
For Each objProcess in colProcessList
    colProperties = objProcess.GetOwner(strNameOfUser,strUserDomain)
    If strNameOfUser = "SYSTEM" Then    
        objProcess.Terminate()
    End If
Next
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top