Um ein Programm als normaler Benutzer zu starten wenn meine eigene Anwendung als Administrator läuft, würde ich gerne den Quelltext verwenden den ich hier gefunden habe:
https://pastebin.com/S9WLMDhB
Der Code funktioniert, allerdings würde ich gerne auf möglicherweise auftretende Fehler reagieren können. Dazu habe ich die original Prozedur ShellExecuteFromExplorer zum Test folgendermassen umgeschrieben:
Delphi-Quellcode:
function ShellExecuteFromExplorer(lpVerb, lpFile, lpParameters, lpDirectory : PChar;
nShow : Integer) : HRESULT;
var
FolderView: IShellFolderViewDual;
DispShell: IDispatch;
ShellDispatch: IShellDispatch2;
begin
Result := E_NOTIMPL;
GetDesktopAutomationObject(IShellFolderViewDual, FolderView);
OleCheck(FolderView.get_Application(DispShell));
OleCheck(DispShell.QueryInterface(IShellDispatch2, ShellDispatch));
Result := ShellDispatch.ShellExecute(lpFile, String(lpParameters), String(lpDirectory), String(lpVerb), nShow);
end;
Übergebe ich jetzt bspw. absichtlich einen ungültigen Pfad an die Funktion, erhalte ich eine Fehlermeldung obwohl ich kein ShowMessage o.ä. in meinem Quelltext habe:
Code:
"%systemroot%\System32\cmd.exe" konnte nicht gefunden werden. Stellen Sie sicher, dass Sie den Namen richtig eingegeben haben und wiederholen Sie den Vorgang.
Desweiteren habe ich es auch mal mit einem try..except-Block versucht:
Delphi-Quellcode:
function ShellExecuteFromExplorer(lpVerb, lpFile, lpParameters, lpDirectory : PChar;
nShow : Integer) : HRESULT;
var
FolderView: IShellFolderViewDual;
DispShell: IDispatch;
ShellDispatch: IShellDispatch2;
begin
Result := E_NOTIMPL;
GetDesktopAutomationObject(IShellFolderViewDual, FolderView);
OleCheck(FolderView.get_Application(DispShell));
OleCheck(DispShell.QueryInterface(IShellDispatch2, ShellDispatch));
try
Result := ShellDispatch.ShellExecute(lpFile, String(lpParameters), String(lpDirectory), String(lpVerb), nShow);
except
showmessage('Meine eigene Fehlermeldung');
end;
end;
Die Fehlermeldung bleibt leider die gleiche. Was muss ich ändern damit ich eigene Fehlermeldungen verwenden kann?