Shutdown et windows vista

Résolu
moi411 Messages postés 179 Date d'inscription samedi 22 novembre 2003 Statut Membre Dernière intervention 25 juin 2017 - 17 nov. 2008 à 11:31
moi411 Messages postés 179 Date d'inscription samedi 22 novembre 2003 Statut Membre Dernière intervention 25 juin 2017 - 23 nov. 2008 à 12:54
Bonjour tout le monde,
Je veux créer une application qui éteint windows (vista home premium) au bout de x sec, minutes ou heure...
Pour ça j'ai créer un chronomètre à la fin duquel j'appelle ma fonction de fermeture.

Voila l'appelle de la fonction : eteindre("shutdown", "-s");
et la fonction elle-même:
public void eteindre(string FName, string Args)
        {
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.EnableRaisingEvents = true;
            proc.StartInfo.FileName = FName;
            proc.StartInfo.Arguments = Args;
        }

en fait le problème est que rien ne se passe, je n'ai pas d'exception ni d'erreur!
Sinon dans la commande exécuter, ça marche normalement (comme ça: shutdown -s)

Je vous remerci d'avance.
moi

13 réponses

moi411 Messages postés 179 Date d'inscription samedi 22 novembre 2003 Statut Membre Dernière intervention 25 juin 2017 3
18 nov. 2008 à 22:10
bonsoir,
J'ai trouvé une alternative...
Creer un raccourci (clique bouton droit puis nouveau et raccourci) avec comme emplacement "shutdown -s -t 00" ensuite je lance le raccourci par  System.Diagnostics.Process.Start(@"emplacement du raccourci créer au-dessus");
Seul inconvénient, je dois avoir ce raccourci au même endroit sur toutes les machines ou mets ce programme!
Mais bon, c'est moindre mal.

moi
3
moi411 Messages postés 179 Date d'inscription samedi 22 novembre 2003 Statut Membre Dernière intervention 25 juin 2017 3
23 nov. 2008 à 12:54
Bonjour,
Ca y est, eureka... J'ai essayé avec wmi et ça fonctionne enfin comme je le veux... En ce qui concerne ExitWindowsEx, je dois encore faire des recherches parce que comme avec wmi ça marche, j'ai laissé de côté (temporairement) les autres pistes.

Ci-dessous, la solution avec d'abord l'assembly: using System.Management; (ne pas oublier la référence System.Management)

static void Main(string[] args)
        {
            ManagementClass W32_OS = new ManagementClass("Win32_OperatingSystem");
            ManagementBaseObject inParams, outParams;

            W32_OS.Scope.Options.EnablePrivileges = true;
            foreach (ManagementObject obj in W32_OS.GetInstances())
            {
                inParams = obj.GetMethodParameters("Win32Shutdown");
                inParams["Flags"] = 5;// force l'arrêt
                inParams["Reserved"] = 0;
                outParams = obj.InvokeMethod("Win32Shutdown", inParams, null);
            }
        }

Pour les commentaires, il faut que fasse de plus amples recherches...
Mais ça fonctionne.

Merci à tous!
moi
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
17 nov. 2008 à 13:18
Salut,

Avec ce post ca va peut etre resoudre ton probleme.
http://www.csharpfr.com/forum/sujet-SHUTDOWN-CSHARP_1208978.aspx
0
moi411 Messages postés 179 Date d'inscription samedi 22 novembre 2003 Statut Membre Dernière intervention 25 juin 2017 3
17 nov. 2008 à 13:57
Ok merci je vais tenter ça mais sinon en C# sous vista, le "shutdown habituel" ne fonctionne plus?
A bientôt.
moi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
17 nov. 2008 à 14:44
Bonjour,
Cette commande est toujours disponible sur Windows Vista.
Par contre la synthaxe est -s x -t (ou x est la durée, 0 pour un arrêt immédiat)

<hr />
-Blog-
-WebSite-
0
moi411 Messages postés 179 Date d'inscription samedi 22 novembre 2003 Statut Membre Dernière intervention 25 juin 2017 3
17 nov. 2008 à 16:36
Re,
Le shutdown ne fonctionne toujours, pas, ça marche à partir de la commande exécuter du menu démarrer mais impossible de la faire marcher dans mon programme (programme qui fonctionne parfaitement sous windows xp)

Sinon pour la méthode avec :
 [
DllImport("user32.dll", ExactSpelling true, SetLastError
true)]

internalstaticexternbool ExitWindowsEx(
int Flag,
int Reason);

Même problème il ne se passe rien...

Est-il possible que ces commandes soient volontairement "désactivées"? Et dans ce cas comment pourrait-on les "réactiver"?

Merci quand-même pour vos aides et à la prochaine!
moi
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
18 nov. 2008 à 23:18
Hello !
Je viens de tester

public
class
Program
{
   [
DllImport("user32.dll", ExactSpelling true, SetLastError
true)]
  
internal
static
extern
bool ExitWindowsEx(
int Flag,
int Reason);
 

   public
static
void Main(
string[] args)
   {
      ExitWindowsEx(0, 0);
   }
}

Marche à merveille....

<hr />
-Blog-
-WebSite-
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
19 nov. 2008 à 08:33
Bon en fait c'est plutôt 1, 0 qu'il faut passer à la fonction, mais bon avec 0, 0 ça marche aussi
Sinon t'as essayé avec WMI ??

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

<hr />
-Blog-
-WebSite-
0
moi411 Messages postés 179 Date d'inscription samedi 22 novembre 2003 Statut Membre Dernière intervention 25 juin 2017 3
19 nov. 2008 à 11:52
Bonjour,
Effectivement, ça marche à merveille, ce qui n'avait pas fonction c'était l'appel de la fonction... Sinon je rappelle l'assembly: using System.Runtime.InteropServices;

moi
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
19 nov. 2008 à 13:46
Regarde bien la documentation de ExitWindowsEx, sauf erreur passer 0 et 0 comme paramètre n'est pas correcte, c'est plutôt 1, 0. Il faut vérifier dans la documentation !

<hr />
-Blog-
-WebSite-
0
moi411 Messages postés 179 Date d'inscription samedi 22 novembre 2003 Statut Membre Dernière intervention 25 juin 2017 3
19 nov. 2008 à 17:05
re,
Paramètre 0 et 0 = fermeture de session, marche bien si on veut fermer la cession!!!
Paramètre 1 et 0 = quitter windows (celon la doc) mais dans ce cas une valeur est renvoyée: false...

J'ai essayé tout ce qui pouvait servir à éteindre l'ordinateur (forçage et compagnie) mais rien ne fait, quand il s'agit d'éteindre l'ordinateur, le retour est false...

Je commence à me demander si il est possible d'éteindre une machine sous vista par programmation (à part en trichant), tout au moins la mienne!!!

Merci.
moi
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
19 nov. 2008 à 21:48
Evidemment que c'est faisable...
Peut-être faut-il les droits administrateurs? Quoique ça paraît un peu étrange, une application devrait pouvoir redémarrer le système normalement (après installation par exemple).
La solution avec WMI, tu as essayé?

<hr />
-Blog-
-WebSite-
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
21 nov. 2008 à 10:55
Il FAUT adapter les droits d'extinction ou de reboot au processus.

MSDN donne exemple complet sur la fonction ExitWindowsEx.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous