Bonjour,
Je fais référence à cette FAQ Delphi concernant l'UAC.
http://pascalfonteneau.developpez.co...phi/vista/uac/
Je travaille sous RAD Studio XE2 Pro 2011 avec Update 4 et dernier Hotfix.
Station : W7 Home Premium 64bits
J'appelle à l'aide pour résoudre un problème :
Voici le code d'origine:
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30 function RunAsAdmin(const Handle: Hwnd; aFile : string; Params: string): Boolean; //=============================================================================== var sei: TShellExecuteInfoA; begin FillChar(sei, SizeOf(sei), 0); With sei do begin cbSize := SizeOf(sei); Wnd := Handle; fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI; lpVerb := 'runAs'; lpFile := PChar(aFile); lpParameters := PChar(Params); nShow := SW_SHOWNORMAL; end; Result := ShellExecuteEx(@sei); end; procedure TFormZHPDiag.bbTestClick(Sender: TObject); // *************************************************** begin if RunAsAdmin(self.Handle,'C:\Windows\System32\calc.exe','') then showMessage('OK') else RaiseLastOSError; end;
Le compilateur refuse et nécessite le remplacement des paramètres Pchar() par des PAnsiChar()
Voici donc le nouveau code :
Là c'est bon pour le compilateur, il affiche seulement une alerte "Transtypage string en PAnsiChar suspect sur les lpFile et lpParameters
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
17
18
19
20
21 function RunAsAdmin(const Handle: Hwnd; aFile : string; Params: string): Boolean; //=============================================================================== var sei: TShellExecuteInfoA; begin FillChar(sei, SizeOf(sei), 0); With sei do begin cbSize := SizeOf(sei); Wnd := Handle; fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI; lpVerb := 'runAs'; lpFile := PAnsiChar(aFile); lpParameters := PAnsiChar(Params); nShow := SW_SHOWNORMAL; end; Result := ShellExecuteEx(@sei); end;
Mais le clic sur le bouton "bbTest" déclenche le message d'erreur du deboggeur code 1155 ou bien code 2 (Fichier absent) :
Il semble bien que lpFile ne soit pas reconnu ?---------------------------
Notification des exceptions du débogueur
---------------------------
Le projet ZHPDiag.exe a déclenché la classe d'exception EOSError avec le message 'Erreur système. Code : 1155.
Aucune application n’est associée au fichier spécifié pour cette opération'.
---------------------------
J'ai essayé de mettre "Const aFile" au lieu de "aFile : string", mais cela génère une erreur du debuggeur "violation d'accès à l'adresse..."
Voilà si vous avez une idée pour résoudre ce problème,
Toute vos idées seront les bienvenues
Merci d'avance.
A bientôt...
Partager