¿Cuál es la mejor manera de apagar la computadora desde un programa C #?
He encontrado algunos métodos que funcionan, los publicaré a continuación, pero ninguno de ellos es muy elegante. Estoy buscando algo que sea más simple y nativo .net.
Funciona a partir de Windows XP, no disponible en win 2000 o inferior:
Esta es la forma más rápida de hacerlo:
Process.Start("shutdown","/s /t 0");
De lo contrario, use P / Invoke o WMI como otros han dicho.
Editar: cómo evitar crear una ventana
var psi = new ProcessStartInfo("shutdown","/s /t 0");
psi.CreateNoWindow = true;
psi.UseShellExecute = false;
Process.Start(psi);
Tomado de: una publicación de Geekpedia
Este método usa WMI para cerrar ventanas.
Deberá agregar una referencia a System.Management a su proyecto para usar esto.
fuente
Este hilo proporciona el código necesario: http://bytes.com/forum/thread251367.html
pero aquí está el código relevante:
Uso:
o
fuente
Diferentes métodos:
A.
System.Diagnostics.Process.Start("Shutdown", "-s -t 10");
B. Instrumental de administración de Windows (WMI)
C. System.Runtime.InteropServices Pinvoke
D. Gestión del sistema
Después de enviar, he visto que muchos otros también han publicado ...
fuente
El método feo de la vieja escuela. Utilizar el
ExitWindowsEx
función de la API Win32.En el código de producción, debería verificar los valores de retorno de las llamadas a la API, pero lo dejé fuera para aclarar el ejemplo.
fuente
Corto y dulce. Llamar a un programa externo:
Nota: Esto llama al programa Shutdown.exe de Windows, por lo que solo funcionará si ese programa está disponible. Es posible que tenga problemas en Windows 2000 (donde shutdown.exe solo está disponible en el kit de recursos) o XP Embedded .
fuente
Deberia trabajar.
Para reiniciar, es / r
Esto reiniciará la caja de la PC de forma directa y limpia, sin cuadros de diálogo.
fuente
shutdown /s /t 0 //For shutdown
shutdown /r /t 0 //For restart
shutdown /h /t 0 //For hibernate
Además, intente escribirlas en CMD para obtener el mismo resultado.Puede iniciar el proceso de apagado:
shutdown -s -t 0
- Apagarshutdown -r -t 0
- Reiniciarfuente
Tenga en cuenta que
shutdown.exe
es solo una envolturaInitiateSystemShutdownEx
, que proporciona algunas sutilezas que faltan enExitWindowsEx
fuente
Tuve problemas para tratar de usar el método WMI aceptado anteriormente porque siempre recibí excepciones de privilegios a pesar de ejecutar el programa como administrador.
La solución fue que el proceso solicitara el privilegio por sí mismo. Encontré la respuesta en http://www.dotnet247.com/247reference/msgs/58/292150.aspx escrita por un tipo llamado Richard Hill.
He pegado mi uso básico de su solución a continuación en caso de que ese enlace se vuelva viejo.
fuente
Solo para agregar a la respuesta de Pop Catalin, aquí hay un revestimiento que apaga la computadora sin mostrar ninguna ventana:
fuente
Intenté el método WMI de roomaroo para cerrar Windows 2003 Server, pero no funcionaría hasta que agregue `[STAThread] '(es decir, el modelo de subprocesos " Single Threaded Apartment ") a la declaración Main ():
Luego intenté cerrar desde un subproceso, y para que eso funcione, tuve que establecer el "Estado del apartamento" del subproceso en STA también:
Soy un novato de C #, por lo que no estoy completamente seguro de la importancia de los subprocesos de STA en términos de apagar el sistema (incluso después de leer el enlace que publiqué anteriormente). Quizás alguien más pueda elaborar ...?
fuente
Main()
no es necesario[STAThread]
.** Respuesta elaborada ...
fuente
Utilice shutdown.exe. Para evitar problemas al pasar argumentos, ejecución compleja, ejecución desde WindowForms, use el script de ejecución de PowerShell:
System.Management.Automation.dll debe instalarse en el sistema operativo y estar disponible en GAC.
Lo siento por mi ingles.
fuente
No existe un método nativo .net para apagar la computadora. Debe P / Invocar la llamada API ExitWindows o ExitWindowsEx.
fuente
Si desea apagar la computadora de forma remota, puede usar
en cualquier botón haga clic
fuente