IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] Shutdown et Restart Windows


Sujet :

Windows Forms

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut [C#] Shutdown et Restart Windows
    Bonjour,

    Je développe en .NET 2.0 sous VS2005 et j'ai fait une barre d'outils qui permet entre autre d'arreter et de redémarrer le PC.

    Il se trouve que les boutons d'arret/redémarrage du PC ne marche pas a tout les coups, suivant le compte utilisé sur le PC (pourtant tous adminisrateurs). Pas d'erreur particulière ni d'exception, mais rien ne se passe.
    Des fois je clique sur le bouton pour éteindre le PC, rien ne se passe, et si je ferme mon appli, alors aprés l'arret du pc s'effectue. Comme si mon appli empechait le PC de s'arreter... si qqun a une idée, je suis prenneur. merci!

    ci joint le code que j'utilise pour faire cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
            [DllImport("user32.dll")]
            internal static extern bool ExitWindowsEx(uint flags, uint reason);
     
            [DllImport("user32.dll")]
            internal static extern void LockWorkStation();
     
            // from Win32 header file: reason.h
            const uint SHTDN_REASON_MAJOR_APPLICATION = 0x00040000;
            const uint SHTDN_REASON_MINOR_INSTALLATION = 0x00000002;
            const uint SHTDN_REASON_FLAG_PLANNED = 0x80000000;
     
            // from Win32 header file: winuser.h
            const int SE_PRIVILEGE_ENABLED = 0x00000002;
            const int TOKEN_QUERY = 0x00000008;
            const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
            const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
            const int EWX_LOGOFF = 0x00000000;
            const int EWX_SHUTDOWN = 0x00000001;
            const int EWX_REBOOT = 0x00000002;
            const int EWX_FORCE = 0x00000004;
            const int EWX_POWEROFF = 0x00000008;
            const int EWX_FORCEIFHUNG = 0x00000010; 
     
            // redémarre le PC
            public static void restart() {
                adjusteShutDownPrivileges();
                ExitWindowsEx(EWX_REBOOT, SHTDN_REASON_MAJOR_APPLICATION);
            }
     
            // éteind le PC
            public static void shutdown() {
                adjusteShutDownPrivileges();
                ExitWindowsEx(EWX_SHUTDOWN, SHTDN_REASON_MAJOR_APPLICATION);
            }
     
            // Set shutdown privileges for this application
            private static void adjusteShutDownPrivileges(){
                bool ok;
                TokPriv1Luid tp;
                IntPtr hproc = GetCurrentProcess();
                IntPtr htok = IntPtr.Zero;
                ok = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);
                tp.Count = 1;
                tp.Luid = 0;
                tp.Attr = SE_PRIVILEGE_ENABLED;
                ok = LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tp.Luid);
                ok = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);
            }

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 399
    Par défaut
    Tiens si ça peut t'aider :

    Et si tu lance juste la commande système suivante à partir de ton code
    comme on peut le fairte à partire du menu démarrer puis executer

    Pour redemarrer :
    shutdown -r -t 0

    Pour arreter :
    shutdown -s -t 0

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut
    Le probleme est que le shutdown que tu décris ne fonctionne que sur Win XP.
    Je prefererai donc comprendre pourquoi l'autre technique qui est décrite un peu partout sur des forums ou MSDN a un comportement un peu hazardeux...

Discussions similaires

  1. probleme avec c:windows/system32/shutdown.exe
    Par islaine dans le forum Sécurité
    Réponses: 1
    Dernier message: 28/01/2009, 09h46
  2. Windows Millenium, Delphi6 perso et shutdown
    Par systeme1 dans le forum Delphi
    Réponses: 10
    Dernier message: 17/03/2007, 21h45
  3. shutdown et rallumer automatiquement windows
    Par yashiro dans le forum Windows XP
    Réponses: 4
    Dernier message: 29/12/2006, 14h52
  4. [SQL2000] Lignes de commande pour shutdown/restart du serveur
    Par Amnesiak dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/10/2006, 14h46
  5. Shutdown sur Windows 2003 Server? ça marche pas?
    Par PhiberOptik dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 25/08/2006, 03h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo