TShellExecuteInfoA et RunAs (FAQ Delphi)
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:
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 :
Code:
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; |
Là c'est bon pour le compilateur, il affiche seulement une alerte "Transtypage string en PAnsiChar suspect sur les lpFile et lpParameters
Mais le clic sur le bouton "bbTest" déclenche le message d'erreur du deboggeur code 1155 ou bien code 2 (Fichier absent) :
Citation:
---------------------------
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'.
---------------------------
Il semble bien que lpFile ne soit pas reconnu ?
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...