2009-03-20 3 views

Répondre

10

Un moyen facile: Utilisez Process.Start pour exécuter shutdown.exe.

shutdown /s /t 0 

façon Programmatic: P/Invoke un appel à ExitWindowsEx

Ce serait la signature P/Invoke:

[DllImport("aygshell.dll", SetLastError="true")] 
private static extern bool ExitWindowsEx(uint dwFlags, uint dwReserved); 

Dans tous les cas, l'utilisateur exécutant le code aura besoin système d'arrêt privilèges (normalement pas un problème, mais un point important à retenir).

+0

Diriez-vous un peu comment une personne choisirait entre les deux méthodes? Ou est-ce simplement facile vs pas si facile? –

+0

Je voudrais nromally aller à la deuxième option dans le logiciel de production, car il vous donne plus de contrôle (raisons d'arrêt, etc). Cela prend un peu plus de temps à mettre en place, car je devrais rechercher le bon drapeau et la signature. – driis

0

à une supposition (non testé):

Process.Start("shutdown", "-s -t 0"); 
1

Utilisez une variante du code "fermeture de session utilisateur" montré here.

Ce code utilise l'appel API ExitWindowsEx.

0

La dure, fonctionne parfaitement sur les ordinateurs portables, mais il faut un certain temps:

Spawn a couple endless loops in more threads than cpu cores. 
Wait for overheat which will automatically shutdown a computer. 

:)

+0

Tellement de downvotes! Était-ce seulement moi qui trouvais la réponse amusante? – Marcel

+0

amusant, donc +1. Rappelez-vous: Tout le travail et pas de jeu fait Jack un garçon ennuyeux .. –

5

méthodes différentes:

A. System.Diagnostics.Process.Start (» Arrêt "," -s -t 10 ");

B. Windows Management Instrumentation (WMI)

http://www.csharpfriends.com/Forums/ShowPost.aspx?PostID=36953

http://www.dreamincode.net/forums/showtopic33948.htm

C. System.Runtime.InteropServices Pinvoke

http://bytes.com/groups/net-c/251367-shutdown-my-computer-using-c

D. Système de gestion

http://www.geekpedia.com/code36_Shut-down-system-using-Csharp.html

Après mon avis, je l'ai vu tant d'autres ont également affiché ...

+0

+ 1 pour les options et les liens –

+0

Bien que disant que je pense encore - quand une personne non seulement usera-t-elle la première option? –

+0

Je ne suis pas sûr si quelqu'un peut désactiver les droits pour l'exécution de shutdown.exe, dans ce cas, on pourrait avoir besoin de code pour exécuter ... – lakshmanaraj

3

WindowsController est un C# classe wrapper autour ExitWindowsEx.

Parfois, vous devez redémarrer ou arrêter le système d'exploitation de vos applications (par exemple, après l'installation d'un programme). Le framework .NET vous offre un moyen indirect pour redémarrer l'ordinateur via Windows Management Instrumentation classes (WMI) dans l'espace de noms System.Management , cependant, il semble y avoir quelques problèmes dans leur mise en œuvre.

Voilà pourquoi nous avons créé le WindowsController classe qui implémente certaines fonctions API pour redémarrage et l'arrêt de Windows. Il prend en charge tous les modes ExitWindowsEx et il peut également hiberner et suspendre le système. Cette classe est disponible en C# et version VB.NET. Il peut être compilé à un module .NET ou à une bibliothèque pour être utilisé à partir d'autres langages .NET. Depuis il repose sur l'API Windows, il ne fonctionnera pas sur Linux ou FreeBSD.

(mentalis.org)

0

Vous pouvez également utiliser InitiateSystemShutdown

http://www.pinvoke.net/default.aspx/advapi32.initiatesystemshutdown

using System; 
using System.Runtime.InteropServices; 
using System.Text; 

public class Program 
{ 
    [DllImport("advapi32.dll") ] 
    public static extern bool InitiateSystemShutdown(string MachineName , string Message , uint Timeout , bool AppsClosed , bool Restart); 

    [DllImport("kernel32.dll") ] 
    public static extern uint GetLastError(); 

    [DllImport("kernel32.dll") ] 
    public static extern uint FormatMessage(uint Flags , IntPtr Source , uint MessageID , uint LanguageID , StringBuilder Buffer , uint Size , IntPtr Args); 



    public static void Main() 
    { 
     InitiateSystemShutdown(System.Environment.MachineName, "hello", 0, false, false); 
     //InitiateSystemShutdown("localhost", "hello", 0, false, false); 

    } 
} 
Questions connexes