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

API, COM et SDKs Delphi Discussion :

Arrêt Windows sur pc distant [InitiateSystemShutdown]


Sujet :

API, COM et SDKs Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut Arrêt Windows sur pc distant [InitiateSystemShutdown]
    Bonjour,

    J'développe un logiciel avec Delphi 2005 en Win32 pour Windows. Et j'aimerais pouvoir éteindre un ordinateur distant se trouvant sur l'même réseau que moi à partir de mon pc.

    J'ai bien trouvé la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BOOL InitiateSystemShutdown(LPTSTR lpMachineName, LPTSTR lpMessage, DWORD dwTimeout, BOOL ForceAppsClosed, BOOL bRebootAfterShutdown)
    , mais j'ai quelques p'tites difficulté à l'utiliser comme vous pouvez l'voir :

    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
    Function  InitiateSystemShutdown(lpMachineName, lpMessage, dwTimeout, bForceAppsClosed, bRebootAfterShutdown, dwreason);
    Const
     SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
     
    begin;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      lpMachineName : LPTSTR;
     
    begin
      lpMachineName := 'Barton2500';
      InitiateSystemShutdown(lpMachineName, NULL, 20, True, True, 0);
     
    end;
    J'ai cherché des infos sur pas mal de sites et forums, mais j'ai quasi rien trouvé, rien trouvé d'interessant en tout cas (http://msdn.microsoft.com/library/de...shutdownex.asp et http://delphi.newswhat.com/geoxml/fo...ps.borland.com).

    Si quelqu'un saurait m'aider, ça serait sympa.

    D'avance merci.

  2. #2
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    Bonjour à toi,

    je te conseille d'aller voir dans la FAQ, le tutorial super bien fait sur Indy, tu vas y trouver ton bonheur avec les CommandHandlers

    @
    PpPool

  3. #3
    Membre expert
    Avatar de Bestiol
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 515
    Points : 3 894
    Points
    3 894
    Par défaut
    eeeeuh c'est moi ou tu as redéfini la fonction InitiateSystemShutdown dans ton code ???

    InitiateSystemShutdown est déclarée dans l'unité Windows.
    J'ai utilisé ce code chez moi, qui fonctionne très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InitiateSystemShutdown('\\127.0.0.1', 'Shutting down !', 3600, True, False);
    Ca m'affiche un message comme quoi l'ordinateur va être fermé dans une heure. Je n'ai pas pu essayer avec un ordinateur distant car le seul qui soit sur mon réseau actuellement a Windows 98...

    Pour info, l'arrêt de l'ordinateur peut être stoppé grâce à AbortSystemShutdown.
    Mea est trop forte, elle flotte : mea coule pas !

    Basically this boot sector (Win95) code is 32 bit extension for a 16 bit patch to an 8 bit boot sector originally coded for a 4 bit microprocessor, written by a 2 bit company, that can't stand 1 bit of competition.

    olance.developpez.com
    Servez-vous, profitez, abusez de la FAQ Delphi !!

  4. #4
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    la solution de Bestiol est testé et validé entre un XP et un 2000 et entre un 2000 et un xp

    Cordialement
    Fais cogiter ta Noisette !!

    Participez à la page SOURCES Delphi !

    Découvrez le Défi Delphi

    Mon Mail

  5. #5
    Membre expert
    Avatar de Bestiol
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 515
    Points : 3 894
    Points
    3 894
    Par défaut
    Merci NoisetteProd

    Alec tu arrives maintenant à utiliser la fonction ?
    Mea est trop forte, elle flotte : mea coule pas !

    Basically this boot sector (Win95) code is 32 bit extension for a 16 bit patch to an 8 bit boot sector originally coded for a 4 bit microprocessor, written by a 2 bit company, that can't stand 1 bit of competition.

    olance.developpez.com
    Servez-vous, profitez, abusez de la FAQ Delphi !!

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Merci d'avoir répondu si vite. Mais malheureusement j'y arrive tjs pas ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       InitiateSystemShutdown('\\192.168.123.110', 'Shutting down !', 10, True, False);
    end;
    J'ai essayé via deux pc avec WinXP, mais ça donne rien ... il n'y a aucun message qui s'affiche sur 192.168.123.110 et il ne s'éteindt pas.

    Merci pour votre aide.

  7. #7
    Membre expert
    Avatar de Bestiol
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 515
    Points : 3 894
    Points
    3 894
    Par défaut
    Vérifie l'accessibilité de cette adresse sur ton réseau au cas où, en envoyant un ping...

    Tu as bien supprimé ça de ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function  InitiateSystemShutdown(lpMachineName, lpMessage, dwTimeout, bForceAppsClosed, bRebootAfterShutdown, dwreason);
    Const
     SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
     
    begin;
    end;
    ?

    Tu exécutes ce code sur un compte administrateur ? Je pense que ça peut jouer...
    Mea est trop forte, elle flotte : mea coule pas !

    Basically this boot sector (Win95) code is 32 bit extension for a 16 bit patch to an 8 bit boot sector originally coded for a 4 bit microprocessor, written by a 2 bit company, that can't stand 1 bit of competition.

    olance.developpez.com
    Servez-vous, profitez, abusez de la FAQ Delphi !!

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    J'ai vérifié l'accessibilité de cette adresse en envoyant une requête ping, requête ping qui a été concluante.

    Et j'ai bien supprimé cette partie de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function  InitiateSystemShutdown(lpMachineName, lpMessage, dwTimeout, bForceAppsClosed, bRebootAfterShutdown, dwreason); 
    Const 
     SE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; 
     
    begin; 
    end;
    Il ne me reste donc, que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button1Click(Sender: TObject); 
    begin 
       InitiateSystemShutdown('\\192.168.123.110', 'Shutting down !', 10, True, False); 
    end;
    J'effectue cette opération entre deux pc : WinXP SP2 et session administrateur.

    Encore merci pour votre aide Bestiol et NoisetteProd !!!

  9. #9
    Membre expert
    Avatar de Bestiol
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 515
    Points : 3 894
    Points
    3 894
    Par défaut
    Bizarre bizarre...
    As-tu essayé avec \\127.0.0.1 pour voir ?

    Aurais-tu éventuellement posé des restrictions sur l'un des deux systèmes ?
    Mea est trop forte, elle flotte : mea coule pas !

    Basically this boot sector (Win95) code is 32 bit extension for a 16 bit patch to an 8 bit boot sector originally coded for a 4 bit microprocessor, written by a 2 bit company, that can't stand 1 bit of competition.

    olance.developpez.com
    Servez-vous, profitez, abusez de la FAQ Delphi !!

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Non, j'ai mis aucune restriction.

    J'ai changé l'ip \\192.168.123.110 par celle que tu m'as donné \\127.0.0.1, et là ça fonctionne ... 'fin c'est le pc qui envoit la requête qui redémarre ... Mais c'est déjà un début ...

    Mais je n'arrive pas à trouver l'ip de l'autre pc 192.168.123.110 (celui que je veux éteindre) en format 127.0.0.xxx ...

    Si tu pourais encore un peu m'éguiller, merci.

  11. #11
    Membre expert
    Avatar de Bestiol
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 515
    Points : 3 894
    Points
    3 894
    Par défaut
    l'ip 127.0.0.1, c'est l'ip locale, elle renvoie toujours au PC sur lequel tu l'utilises.

    Tu n'as que ces deux pc sur ton réseau ??? Ce serait possible que tu te sois planté d'adresse ? lol

    Il doit nous manquer un élément par rapport à ta config... Firewall ? Protection diverse ?
    La session est bien ouverte sur le pc cible ?
    Mea est trop forte, elle flotte : mea coule pas !

    Basically this boot sector (Win95) code is 32 bit extension for a 16 bit patch to an 8 bit boot sector originally coded for a 4 bit microprocessor, written by a 2 bit company, that can't stand 1 bit of competition.

    olance.developpez.com
    Servez-vous, profitez, abusez de la FAQ Delphi !!

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Bestiol
    Tu n'as que ces deux pc sur ton réseau ??? Ce serait possible que tu te sois planté d'adresse ? lol
    Non, j'viens de vérifier avec ipconfig /all et l'ip est bien 192.168.123.110 ...

    Citation Envoyé par Bestiol
    Il doit nous manquer un élément par rapport à ta config... Firewall ? Protection diverse ?
    Je vois deux logiciels qui pourraient peut-être bloquer la commande :
    - SP1/SP2 de WinXP qui ont un firewall.
    - Norton SystemWorks 2005.

    Ces deux logiciels sont présents sur les deux pc.

    Citation Envoyé par Bestiol
    La session est bien ouverte sur le pc cible ?
    Oui, une session administrateur est ouverte sur le pc cible.

  13. #13
    Membre expert
    Avatar de Bestiol
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 515
    Points : 3 894
    Points
    3 894
    Par défaut
    Citation Envoyé par alec_002
    Je vois deux logiciels qui pourraient peut-être bloquer la commande :
    - SP1/SP2 de WinXP qui ont un firewall.
    - Norton SystemWorks 2005.
    Tu as essayé de les désactiver ? Ils n'influent pas directement en local, mais peuvent éventuellement bloquer la requête par le réseau...
    Mea est trop forte, elle flotte : mea coule pas !

    Basically this boot sector (Win95) code is 32 bit extension for a 16 bit patch to an 8 bit boot sector originally coded for a 4 bit microprocessor, written by a 2 bit company, that can't stand 1 bit of competition.

    olance.developpez.com
    Servez-vous, profitez, abusez de la FAQ Delphi !!

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Je les ai désactivé, mais ça ne donne tjs rien ...

    Est-ce que le problème pourait venir de mon routeur USR8054 ?

    Si oui, y a t'il moyen de lancer une requête à partir du soft pour qu'il laisse passer cette requête ?

  15. #15
    Membre expert
    Avatar de Bestiol
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 515
    Points : 3 894
    Points
    3 894
    Par défaut
    là pour le coup je n'en ai aucune idée....
    Mea est trop forte, elle flotte : mea coule pas !

    Basically this boot sector (Win95) code is 32 bit extension for a 16 bit patch to an 8 bit boot sector originally coded for a 4 bit microprocessor, written by a 2 bit company, that can't stand 1 bit of competition.

    olance.developpez.com
    Servez-vous, profitez, abusez de la FAQ Delphi !!

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Tanpis ...

    Merci qd même de m'avoir aidé ... c'est sympa.

    Bonne soirée et à une prochaine sur l'forum.

  17. #17
    Membre expert
    Avatar de Bestiol
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 515
    Points : 3 894
    Points
    3 894
    Par défaut
    je t'en prie

    Peut-être que quelqu'un d'autre aura plus d'idées que moi sur la question

    A la revoyure et bonne prog' !!
    Bestiol.
    Mea est trop forte, elle flotte : mea coule pas !

    Basically this boot sector (Win95) code is 32 bit extension for a 16 bit patch to an 8 bit boot sector originally coded for a 4 bit microprocessor, written by a 2 bit company, that can't stand 1 bit of competition.

    olance.developpez.com
    Servez-vous, profitez, abusez de la FAQ Delphi !!

  18. #18
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    il se peut que tu aies des pb de droits.
    Sur le lien MSDN que tu cites :

    Remarks
    To shut down the local computer, the calling thread must have the SE_SHUTDOWN_NAME privilege. To shut down a remote computer, the calling thread must have the SE_REMOTE_SHUTDOWN_NAME privilege on the remote computer. By default, users can enable the SE_SHUTDOWN_NAME privilege on the computer they are logged onto, and administrators can enable the SE_REMOTE_SHUTDOWN_NAME privilege on remote computers. For more information, see Running with Special Privileges.
    Voir http://delphi.developpez.com/faq/?pa...StopRunWindows

    ou encore un autre méthode
    http://laurent-dardenne.developpez.c...es/wmi-p2/#L16

    N'ayant pas en ce moment de réseau actif je n'ai pas testé la première méthode, pour la seconde c'est ok.

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Merci Laurent de m'faire remarquer ce problème de droits.

    J'ai été sur le second lien que tu m'as donnée (http://laurent-dardenne.developpez.c...es/wmi-p2/#L16). J'ai pris note de ce que tu as dis dans ce tuto.

    Mais il y a un point que je ne comprend pas, dans les Uses tu définis WbemScripting_TLB. S'agit il d'une bibliothèque de composants spécifique ou d'un fichier *.pas que tu as mis dans l'archive ?

    J'ai essayé de trouver, mais je n'ai pas compris.

    dsl pour cette bête question ... et encore merci pour votre aide !!!

  20. #20
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    La seconde méthode citée l'était pour info. Il s'agit de l'appel de la même API mais via WMI.
    Les fichier suffixés _TLB désigne un librairie de type. Effectivement elle n'est pas dans les sources des exemples.
    voir le tuto première partie
    http://laurent-dardenne.developpez.c...s/wmi-p1/#L6.1

Discussions similaires

  1. [batch] [services windows] état service sur serveur distant
    Par Deadpool dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 16/03/2009, 17h50
  2. Authentification Windows sur une machine distante
    Par titip dans le forum Windows Forms
    Réponses: 11
    Dernier message: 01/08/2008, 18h57
  3. récupérer la version d'OS windows sur un PC distant
    Par DegubError dans le forum Windows
    Réponses: 4
    Dernier message: 31/01/2006, 20h28
  4. [DBA] Arrêt Oracle sur Windows
    Par titof dans le forum Oracle
    Réponses: 6
    Dernier message: 26/01/2006, 14h14
  5. Application Windows gérant une DB ACCESS sur serveur distant
    Par paulgiot dans le forum Bases de données
    Réponses: 1
    Dernier message: 11/01/2005, 09h59

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