Así que aquí está la primicia:Ejecución de un proceso en la pantalla de bienvenida de Windows 7
escribí una pequeña aplicación de C# hace un tiempo que muestra el nombre de host, dirección IP, fecha fotografiado, el estado de deshielo (usamos DeepFreeze), corriente dominio, y la fecha/hora actual, para mostrar en la pantalla de bienvenida de nuestras máquinas de laboratorio de Windows 7. Esto fue para reemplazar nuestro bloque de información anterior, que se configuró estáticamente en el inicio y en realidad el texto incrustado en el fondo, con algo un poco más dinámico y funcional. La aplicación utiliza un temporizador para actualizar la dirección IP, el estado de congelación profunda y el reloj cada segundo, y comprueba si un usuario ha iniciado sesión y se suicida cuando detecta dicha condición.
Si solo lo ejecutamos, a través de nuestro script de inicio (establecido a través de la política de grupo), mantiene abierta la secuencia de comandos y la máquina nunca llega al indicador de inicio de sesión. Si utilizamos algo así como los comandos start o cmd para iniciarlo en un shell/process separado, se ejecuta hasta que finalice el script de inicio, en cuyo momento Windows parece limpiar todos y cada uno de los procesos secundarios del script. Actualmente podemos evitarlo usando psexec -s -d -i -x
para desactivarlo, lo que permite que persista después de que se complete el script de inicio, pero puede ser increíblemente lento, agregando entre 5 segundos y más de un minuto a nuestro tiempo de inicio.
Experimentamos con el uso de otra aplicación C# para iniciar el proceso, a través de la clase Process, utilizando llamadas WMI (Win32_Process y Win32_ProcessStartup) con varios indicadores de inicio, etc., pero todos terminan con el mismo resultado proceso de bloqueo de información siendo asesinado. Intenté volver a escribir la aplicación como un servicio, pero los servicios nunca fueron diseñados para interactuar con el escritorio, y mucho menos con la ventana de inicio de sesión, y hacer funcionar las cosas en el contexto correcto nunca pareció funcionar.
Entonces, para la pregunta: ¿Alguien tiene una buena manera de lograr esto? ¿Iniciar una tarea para que sea independiente del script de inicio y se ejecute en la parte superior de la pantalla de bienvenida?
cómo darse cuenta de esto en Win XP? recibo un error de token no válido ... – MariusK
@Fluxer El proceso de inicio de sesión de Windows XP es enormemente diferente al de Vista y superior. XP usó GINA, pero desde Vista hacia arriba, Microsoft reescribió la sección de inicio de sesión para usar CredentialProviders. Espero que esto ayude. –
Recibo el error 1314 cuando trato de ejecutar CreateProcessAsUser. ¿Alguna sugerencia? string lpAppName = @ "D: \ SMU \ Computación ubicua 7390 \ Final Project \ Locker \ Locker \ bin \ Debug \ Locker.exe"; if (! CreateProcessAsUser (newToken, lpAppName, null, ref tokenAttributes, ref threadAttributes, true, (uint) CreateProcessFlags.CREATE_NEW_CONSOLE | (uint) CreateProcessFlags.INHERIT_CALLER_PRIORITY, IntPtr.Zero, null, ref si, out pi)) –