Bonjour,
Je développe une application de distribution de paquets MSI sur des machines clientes.
Cette application fait la chose suivante :
- permet à l'administrateur réseau de choisir l'emplacement d'un paquet MSI
- crée des raccourcis dans les menu démarrer des groupes d'utilisateurs que l'on souhaite (dans un environnement SAMBA et profils itinérants)
- après validation, l'interface créée un "lanceur" que va exécuter le client sur son poste. Ce lanceur rehausse les droits avec un RunAsSet(), et fait office de lanceur automatique : si le programme est déjà installé, ça le lance, sinon, ça lance le MSI.
Après cette explication généraliste, j'en viens au fait et à ma question :
Au lancement de l'interface par l'administrateur, le mot de passe du compte d'installation contenu dans un fichier INI est comparé à celui existant sur le serveur. Pour ce faire, je fais un RunAsSet avec le mot de passe du INI.
Je voudrais que si ça marche, l'interface soit lancée. Sinon, je voudrais mettre à jour le INI en demandant le mot de passe actuel.
Problème : quand mon RunAsSet échoue car le mot de passe du INI est erroné, j'ai un message d'erreur fatal. Le programme s'arrête là et je ne peux pas demander de mettre à jour le fichier INI ... Voir message en fichier joint.
Ci-dessous ma fonction de comparaison.
Merci pour votre aide.
Cordialement.
► Afficher le texte
Code : Tout sélectionner
Func ComparePwds()
Local $INIPwd
Local $NewPwd = ""
Local $CurrentUserName
$INIPwd = IniRead("T:\logiciels\alias\" & $INIFile, "PWD", "EncryptedPwd", "empty")
If $INIPwd = "empty" Then
$NewPwd = InputBox("Erreur", "Le mot de passe n'a pas encore été encodé dans le fichier INI. Renisegnez-le dans la zone ci-dessous afin d'assurer la bonne installation des logiciels par les postes clients.", "", "*")
While $NewPwd = ""
$NewPwd = InputBox("Erreur", "Merci de saisir un mot de passe.", "", "*")
WEnd
RunAsSet("install", "SCRIIBE", $NewPwd)
RunWait(@ComSpec & " /C echo %USERNAME% > C:\TestPwd.txt", "C:\WINDOWS\system32\", @SW_HIDE)
RunAsSet()
$TempPwd = FileOpen("C:\TestPwd.txt", 0)
$CurrentUserName = FileRead($TempPwd, 7)
FileClose($TempPwd)
FileDelete("C:\TestPwd.txt")
If StringInStr("install", $CurrentUserName) < 1 Then
Msgbox(1, "Erreur", "Le mot de passe que vous avez saisi ne correspond pas à celui de l'installeur Scribe. Relancez l'application et entrez le mot de passe à nouveau.")
RunAsSet()
Exit
Else
RunAsSet()
IniWrite("T:\logiciels\alias\" & $INIFile, "PWD", "EncryptedPwd", _StringEncrypt (1, $NewPwd, $EncondingKey, 2))
EndIf
Else
$INIPwd = _StringEncrypt (0, $INIPwd, $EncondingKey, 2)
RunAsSet("install", "SCRIIBE", $INIPwd)
RunWait(@ComSpec & " /C echo %USERNAME% > C:\TestPwd.txt", "C:\WINDOWS\system32\", @SW_HIDE)
RunAsSet()
$TempPwd = FileOpen("C:\TestPwd.txt", 0)
$CurrentUserName = FileRead($TempPwd, 7)
FileClose($TempPwd)
FileDelete("C:\TestPwd.txt")
If StringInStr("install", $CurrentUserName) < 1 Then
Msgbox(1, "Erreur", "Le mot de passe contenu dans le fichier INI ne correspond pas à celui du serveur Scribe. Le mot de passe actuel va vous être demandé pour mettre à jour le fichier INI.")
RunAsSet()
IniWrite("T:\logiciels\alias\" & $INIFile, "PWD", "EncryptedPwd", _StringEncrypt (1, InputBox("Mot de passe", "Quel est le mot de passe actuel du compte install ?", "", "*"), $EncondingKey, 2))
ComparePwds()
Else
RunAsSet()
EndIf
EndIf
EndFunc