Page 1 sur 1

[R] Execution script au Shutdown sous Seven/Vista

Posté : mer. 27 avr. 2011 14:42
par ferrierd
Bonjour,

Je cherche à exécuter un script lors du shutdown de la machine.
Je sais que ce thème a été abordé maintes fois.
J'ai déjà exploré plusieurs pistes (console gpedit.msc, Fonction OnAutoitExitRegister,...)

Je suis arrivé au code suivant qui m'est pleinement fonctionnel
► Afficher le texte
Si une demande de shutdown est faite, alors celle-ci est désactivée.
Ce qui me permet donc de pouvoir exécuter mon script et de Shutdown le Pc après.

Le seul souci actuellement c'est que cela ne fonctionne pas sur un Vista ou un Seven.

Sur le forum Anglais j'ai trouvé l'utilisation des fonctions

Code : Tout sélectionner

Func _ShutdownBlockReasonCreate($Hwnd, $wStr)
    ; http://msdn.microsoft.com/en-us/library/ms...28VS.85%29.aspx
    ; Prog@ndy
    Local $aResult = DllCall("User32.dll", "int", "ShutdownBlockReasonCreate", "hwnd", $Hwnd, "wstr", $wStr)
    If @error Then Return SetError(1,0,0)
    Return $aResult[0]
EndFunc

Func _ShutdownBlockReasonDestroy($Hwnd)
    Local $aResult = DllCall("User32.dll", "int", "ShutdownBlockReasonDestroy", "hwnd", $Hwnd)
    If @error Then Return SetError(1,0,0)
    Return $aResult[0]
EndFunc
Mais cela redonne la main à l'utilisateur.
Je souhaite pour ma part avoir le même focntionnement que sous un Xp, c'est à dire differer la demande de shutdown, pour pouvoir lancer un script de sauvegarde, et reprendre le Shutdown de manière transparente pour l'utilisateur.

Si vous avez une expérience dans ce domaine...
Par avance Merci

Re: [..] Execution script au Shutdown sous Seven/Vista

Posté : mer. 27 avr. 2011 15:40
par ZDS
Hello!

Si tu vois que le shutdown a été interrompu, il te suffit de relancer le shutdown toi même, non?

Use case que je pense avoir saisi :
- Tu lances ton script et ton install
- Le script boucle tranquillement
- Un arrêt de l'ordi est demandé (peux tu détecter si c'est un arrêt, une mise en veille ou un redémarrage?)
- Ton script l'intercepte et le met en attente
- L'install continue
[... Pendant ce temps, à Vera Cruz]
- L'install se finit
- Ton script reprend la main et relance l'extinction <== C'est là que ça plante?
- Windows s'autodétruit dans un final à la "Portal 2" et de magnifiques effets spéciaux dignes de "Plan 9 from Outer Space"
- Le héros embrasse la princesse
Fin :)

Dans ce cas, sur la fin du script (après ta boucle While), fais un sleep de 5 secondes, et force toi même l'extinction avec la commande Shutdown (code [, reason]), si une demande d'extinction était demandée pendant l'exécution. (code : 0=déconnexion, 1=arrêt, 2=redémarrage).

C'est une façon de shunter le problème, même si ça ne donne aucune réponse à ton souci premier, pourquoi Vista et Seven se vautrent comme des loutres bourrées dans le brouillard? (y a pas un pléonasme là dedans? ^^). Plus sérieusement, je pense que ça vient de l'UAC, essaye avec un #RequireAdmin au pire (même si ça règle quasiment jamais les problèmes).

A bientôt !

Re: [..] Execution script au Shutdown sous Seven/Vista

Posté : dim. 01 mai 2011 09:30
par ferrierd
Bonjour à tous,

Ca pourrait être ca ZDS ;-)

Entre temps j'ai posé la même question sur le forum anglais.
Je vous livre une réponse (pas encore testé)
► Afficher le texte
Et un Second exemple:
► Afficher le texte

Re: [R] Execution script au Shutdown sous Seven/Vista

Posté : dim. 01 mai 2011 20:35
par Piloupilou
Bonsoir, petite question, j'ai un peu lu le code mais trop compris encore grandchose

Mais : quelle est la fonction qui detecte le shutdown ? et comment ca marche en gros ?

Est ce qu'il y en de la meme maniere qui peuvent detecter d'autres evenements, comme des processus qui se lancent par exemple ?

Re: [R] Execution script au Shutdown sous Seven/Vista

Posté : mar. 03 mai 2011 11:23
par ferrierd
Bonjour,

Je ne suis pas un spécialiste de la question.
Mais pour autant et d'après ce que j'ai pu comprendre à la fermeture de l'OS, Windows envoie une requête (WM_QUERYENDSESSION) à tous les programmes actifs, demandant de se fermer de manière propre.

Le script intercepte cette requete et annule la demande de fermeture de Windows, le temps d'executer son propre script.