User32.dll con C#

xjuanch0x

Lanero Reconocido
25 Sep 2004
690
Bueno tengo un problema con la funcion ExitwindowsEx() de la DLL User32.dll, lo que pasa es que tengo un programa que ejecuta una serie de comandos SQL sobre una base de datos, cuando termine el proceso debera desconectarse y apagarse, ya tengo la funcion de apagado , es la ExitwindowsEx() de la DLL mencionada el probrema es que los parametros que se deben usar son:

ExitwindowsEx(0x00000008,0) donde 0x0000008, es la opcion ShutDown del sistema operativo :muerto:

Lo malo y es donde esta el problema es que no me apaga el equipo sino que cierra la session del usuario que ejecute el programa.

Si alquien sabe que me aclare, ya que he leido que se podia hacer en windows xp SP 1, pero no se que pasa en el SP 2

http://msdn.microsoft.com/en-us/library/aa383749(VS.85).aspx
alli esta el vinculo de la funcion nativa
 

DCowboy

Lanero Reconocido
23 Mar 2006
493
Hola, mira lo que dice sobre EWX_POWEROFF (0x00000008):

The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Remarks section.

El valor por defecto de esos p*tos privilegios cambia de versión en versión de Windows. Así que lo más sano es "ajustarlos", como en el ejemplo.
 

raven9t

Lanero Reconocido
22 Jun 2007
369
Para realizar eso debes jugar con los llamados tokens de seguridad, que al modificarlos con el priviliegio SE_SHUTDOWN_NAME permite que tu aplicacion apague el equipo, pero hay un problema con esto, que pasaria si microsoft cambia el funcionamiento interno de esa api en un nuevo sistema operativo haciendola incompatible con tu programa?, pues que este sencillamente deja de funcionar, por lo que es un riesgo, asi que lo que te recomiendo es que en vez de la api uses la aplicacion que se encuentra en el sistema operativo llamada shutdown.exe, al llamarla desde tu programa no tendras ningun problema ya que esta se encuentra incluida en lo sistemas desde windows 2000(con el kit de recursos de win2000) hasta vista, y funciona incluso con el control de cuentas de usuario, si quieres pasate por el foro de java, ahi colgue una aplicacion que hace esto hecha en java, C# y vb.net(post 2250), espero que te sirva.