Shutdown et windows vista [Résolu]

Signaler
Messages postés
180
Date d'inscription
samedi 22 novembre 2003
Statut
Membre
Dernière intervention
25 juin 2017
-
Messages postés
180
Date d'inscription
samedi 22 novembre 2003
Statut
Membre
Dernière intervention
25 juin 2017
-
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

Messages postés
180
Date d'inscription
samedi 22 novembre 2003
Statut
Membre
Dernière intervention
25 juin 2017
3
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
Messages postés
180
Date d'inscription
samedi 22 novembre 2003
Statut
Membre
Dernière intervention
25 juin 2017
3
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
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
31
Salut,

Avec ce post ca va peut etre resoudre ton probleme.
http://www.csharpfr.com/forum/sujet-SHUTDOWN-CSHARP_1208978.aspx
Messages postés
180
Date d'inscription
samedi 22 novembre 2003
Statut
Membre
Dernière intervention
25 juin 2017
3
Ok merci je vais tenter ça mais sinon en C# sous vista, le "shutdown habituel" ne fonctionne plus?
A bientôt.
moi
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
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-
Messages postés
180
Date d'inscription
samedi 22 novembre 2003
Statut
Membre
Dernière intervention
25 juin 2017
3
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
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
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-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
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-
Messages postés
180
Date d'inscription
samedi 22 novembre 2003
Statut
Membre
Dernière intervention
25 juin 2017
3
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
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
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-
Messages postés
180
Date d'inscription
samedi 22 novembre 2003
Statut
Membre
Dernière intervention
25 juin 2017
3
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
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
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-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Il FAUT adapter les droits d'extinction ou de reboot au processus.

MSDN donne exemple complet sur la fonction ExitWindowsEx.

ciao...
BruNews, MVP VC++