Nous sommes le Mer 18 Juin, 2025 15:40
Supprimer les cookies

Page 4 sur 18Précédent 1, 2, 3, 4, 5, 6, 7 ... 18 SuivantDémarrage variable| Nouveau Start.exe

Image Image Forum dédié à notre projet de clé USB nomade libre sous Windows

Mer 28 Mars, 2007 20:22

N'y a-t-il pas moyen d'envoyer un message WM_CLOSE avec SendMessage() à la fenêtre que vous souhaitez fermer dans votre script NSIS ? Je ne connais pas du tout le language de script de l'installeur de nullsoft mais comme il y a moyen d'utiliser les API natives. Un mix avec FindWindow() devrait faire l'affaire.

Et puis WM_CLOSE est moins goret que de tuer violement la pauvre appli au travers de son processus.
Attentyon, ponaytte maychante !
Téthis

Avatar de l’utilisateur
Messages : 3895
Géo : De passage chez les cathares

Mer 28 Mars, 2007 21:05

bon je vous poste ce que j'ai fait, étant donné que j'ai foiré ma clef usb, j'ai pas pu faire de vrai test.

Pour l'instant, il ne fait pas la difference entre les process de la clef usb et ceux lancé par le start.exe (il ferme tout).
et evidement, il n'ejecte pas la clef usb :|

Code: Tout sélectionner
'initialisations des variables=================
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process")
Set WshNetwork = WScript.CreateObject("WScript.Network")
 strUserDomain = WshNetwork.UserDomain
 strUserComputer = WshNetwork.ComputerName
 strUserName = WshNetwork.UserName   

'boucles de parcour des processus=============
For Each objProcess in colProcessList
'je recupere le proprietaire du processus en cours
    colProperties = objProcess.GetOwner(strProcessOwner,strProcessDomain)
   'si moi (utilisateur connecté) et l'utilisateur du processus sont pareil, je rentre dans le if
   if (strUserDomain = strProcessDomain) AND (strUserName = strProcessOwner) then
      'verification pour que le repertoire du processus soit le même que celui du script (sous entendu de la clef usb)
      if Left(WScript.ScriptFullName,3) = Left(objProcess.ExecutablePath,3) then
         If objProcess.Terminate() <> 0 Then
              WScript.Echo "L'application " & objProcess.Name & " n'a pas pu être fermé, merci de le faire à la main"
         End If
      end if
   end if
Next
msgbox "Fermeture des applications de la clef usb fini"


je vous fourni le code pour lire le fichier ini, je ne sais pas encore comment "bien" implanter le principe de terminer à la fin, les applis du start

Code: Tout sélectionner
prog = ""
nb = 0
'boucle tant que le fichier contient de slignes
Do While f.AtEndOfStream <> True
   'lecture d'une ligne
   TextLine = f.ReadLine
   'je ne traite pas les lignes vide (saut de ligne)
   if TextLine <> "" then
      'je traite pas les lignes de catégorie [...]
      if Left(TextLine,1) <> "[" then
         'je recupere le nom du parametre, si c'est le parametre d'un prog, je l'enregistre
         param = Split(TextLine, "=")
         if Left(param(0),11) = "ExecuteProg" then
            'j'ajoute tout les prog dans un string séparé par des virgules
            prog = prog & param(1) & ","
            nb = nb +1
         end if
      end if
   end if
loop
'je split la prog en tableau
progs = Split(prog, ",")
for i=0 to nb-1
   Wscript.Echo progs(i)
next
f.Close
Set f = Nothing



-petite pause, je m'y remettrait plus tard-
enigmatiqk

Messages : 99
Géo : aix

Jeu 29 Mars, 2007 06:17

bon, j'avance, même si j'ai un peu dérapé sur autre chose:

-je suis tombé sur devcon:
http://support.microsoft.com/?kbid=311272

en lignes de commandes, j'arrive a faire ca (a la main...pour l'instant)
devcon find *usb* // je trouve tout les périphérique usb
devcon find usb\vid* // je trouve tout les périphériques de stockages (non pas les prises usb, mais les clef usb branché)

devcon remove usb\vid* // je debranche tout les périphériques sub ...

voila, en gros me reste à savoir quel périphérique correspond à la clef framakey ..., et de savoir si ca marche sur un compte restraint (beaucoup moins sur)

si la encore, quelq'un veu m'aider, c'est pas de refus ^^
enigmatiqk

Messages : 99
Géo : aix

Jeu 29 Mars, 2007 10:49

Téthis a écrit:N'y a-t-il pas moyen d'envoyer un message WM_CLOSE avec SendMessage() à la fenêtre que vous souhaitez fermer dans votre script NSIS ? Je ne connais pas du tout le language de script de l'installeur de nullsoft mais comme il y a moyen d'utiliser les API natives. Un mix avec FindWindow() devrait faire l'affaire.

Et puis WM_CLOSE est moins goret que de tuer violement la pauvre appli au travers de son processus.

C'est effectivement ce que cherche à faire, mais comme je n'ai pas de fornation de développeur, j'apprends au fur et à mesure et suivant mes besoins.
Ce que je cherche à faire c'est effectivement de dire au logiciel de ce fermer et pas de le tuer, c'est pour ça entre autre que je n'ai fourni que le code.

@Téthis, tu sembles t'y connaitre pourrais tu me dire où je peux trouver les API Windows? Serait tu capable de programmer un plugin qui propose les fonctionnalités de closeprocess, kill, find et bien d'autres?

En claire, il faudrait un exécutable: binaire ou script ou un plugin qui permette de fermer, tuer, trouver une application en fonction de l'endroit où elle est installée ou bien de sa parenté.

Pourquoi sa parenté: c'est à dire fermer un application installée sur l'ordinateur mais qui a été lancée par un lanceur installé sur la clé, et qui donc enregistre son profil utilisateur sur la clé.
Tuxmouraille

Messages : 1044

Jeu 29 Mars, 2007 11:47

Tuxmouraille a écrit:Pourquoi sa parenté: c'est à dire fermer un application installée sur l'ordinateur mais qui a été lancée par un lanceur installé sur la clé, et qui donc enregistre son profil utilisateur sur la clé.


oula, malheureusement, moi je ferme que les processus lancé a partir de la clef, et non les processus qui ouvre un fichier de la clef ..., je sais même pas comment faire ca, ca me parait un poil complex ca ...
enigmatiqk

Messages : 99
Géo : aix

Jeu 29 Mars, 2007 14:02

Bonjour,

peut-être une solution :
http://www.codeproject.com/system/Remov ... Letter.asp

GaeliX
Il y a 10 sortes de gens, ceux qui comprennent le binaire et ceux qui ne le comprennent pas.
Ne jamais attribuer à la malignité ce que la stupidité suffit à expliquer. (loi du rasoir d'Hanlon)
GaeliX

Messages : 408
Géo : Villiers sur Orge

Jeu 29 Mars, 2007 16:42

GaeliX a écrit:Bonjour,

peut-être une solution :
http://www.codeproject.com/system/Remov ... Letter.asp

GaeliX


je te remercie, sauf qu'il s'agit de c++ ... et je pense que j'utiliser déjà acces de type de langage comme ca :D

je met ca de coté quand même

PS: la "mini" appli qu'ils fournissent, ne marche pas chez moi ...
enigmatiqk

Messages : 99
Géo : aix

Jeu 29 Mars, 2007 17:32

Tuxmouraille a écrit:@Téthis, tu sembles t'y connaitre pourrais tu me dire où je peux trouver les API Windows? Serait tu capable de programmer un plugin qui propose les fonctionnalités de closeprocess, kill, find et bien d'autres?
Tu trouveras ça sur la MSDN ou le Platform SDK.

Tuxmouraille a écrit:En claire, il faudrait un exécutable: binaire ou script ou un plugin qui permette de fermer, tuer, trouver une application en fonction de l'endroit où elle est installée ou bien de sa parenté.

Pourquoi sa parenté: c'est à dire fermer un application installée sur l'ordinateur mais qui a été lancée par un lanceur installé sur la clé, et qui donc enregistre son profil utilisateur sur la clé.
Désolé mais je ne sais pas faire par "parenté".

Je n'ai pas idée sur la façon de coder un plugin pour NSIS. :| Je fais occasionnellement des mini-extensions pour LUA, j'ai commencé un truc qui liste les processes pour récupérer le handle afin d'envoyer des messages. C'est plus ou moins ce que fait enigmatiqk en VBS, mais en plus gros :p
Attentyon, ponaytte maychante !
Téthis

Avatar de l’utilisateur
Messages : 3895
Géo : De passage chez les cathares

Jeu 29 Mars, 2007 17:44

En fait, je passais ce lien parceque pour moi le c++ c'est un peu vieux, donc je ne serais pas trop efficace pour adapter ou améliorer ce code.
J'avais bricolé un petit script en python qui récupérait les process et les handles de fichiers puis qui flinguait tout ce beau monde quand le programme ou le fichier ouvert était situé sur la clé. Un peu brutal, je l'accorde, mais en général les fichiers ouverts sont en consultation sur la clé donc pas de risque de perdre les données. La suite était gérée par removedrive.

GaeliX
Il y a 10 sortes de gens, ceux qui comprennent le binaire et ceux qui ne le comprennent pas.
Ne jamais attribuer à la malignité ce que la stupidité suffit à expliquer. (loi du rasoir d'Hanlon)
GaeliX

Messages : 408
Géo : Villiers sur Orge

Mar 03 Avr, 2007 18:59

eh ben, j'ai enfin reussi a faire quelque chose de potable :)

voici donc deux liens:
http://rapidshare.com/files/24629776/remove.rar.html
http://rapidshare.com/files/24629867/removedrive.rar.html

explications:

-remove.zip: 3 fichiers: script.vbs, remove.vbs, remove.exe :
script.vbs ferme tout les process qui on démarré sur la clef usb (je ne gere pas si une appli du pc ouvre un fichier de la clef)
une fois fermé, il copie remove.vbs et remove.exe dans le repertoire temporaire de windows (necessaire), puis lance remove.vbs!
remove.vbs lance le fichier remove.exe avec la ligne de commande necessaire :) (de même que plus haut, je ne sais pas si ca ejecte la clef si un fichier de la clef est ouvert par une appli du pc)
[IMPORTANT]remove.exe à été trouvé sur le net, le vrai nom à l'air d'être quick unplug, et c'est sun shareware (20€ en complet), je ne connais pas grand chose dessus, donc je ne garantie rien et il suffit de me prevenir pour que je supprime le liens[/IMPORTANT]

-removedrive.zip la même chose que remove.zip, sauf que ca utilise une autre appli removedrive.exe au lieu de remove.Exe, surtout que removedrive.exe est gratuit

merci de faire des tests, car j'ai pas trop eu le temps d'en faire, de même j'ai enlever les commentaires pour pas faire trop brouillon (oui le code est pas optimisé, hésitez pas a me corriger), donc je vous écoute si vous avez des questions (postez le code que vous captez pas, je vous expliquerai ici pour en faire profiter tout le monde)

[s]je prepare autre chose[/s], dites moi si ca vous interesse : les deux fichiers du dessus marche avec la lettre du lecteur, je prepare un autre script qui marche en récupérant 2 identifiant de la clef usb, mais cela necessite d'abord d'enregistrer les clef sur un fichier .ini ... seul avantage, possibilité d'éteindre plusieurs clef usb en même temps...
Ce que je prépare n'a rien de "super", c'est juste que je suis passé par la pour arrivé aux deux fichiers du dessus, donc si ca vous interesse je le fignole, sinon je le laisserais tomber :)
Finalement j'arrete, car ce system se basé sur devcon.exe (M$), qui n'ejecte pas de support usb mais qui le desinstall (remove). Et sauf demande importante, je me concentre sur remove et removedrive

j'espere que ca va vous servir :)

[PS]heberger sur rapidshare, ce n'est pas herbergé infiniement (supprimer si non télécharger pendant un certains temps), donc si vous voulez l'heberger ou autre, n'hésitez pas ![/PS]
Dernière édition par enigmatiqk le Ven 06 Avr, 2007 16:26, édité 3 fois au total.
enigmatiqk

Messages : 99
Géo : aix

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit