Programm als Benutzer starten, wenn eigene Anwendung als Admin läuft
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:
Ü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:
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;
Code:
Desweiteren habe ich es auch mal mit einem try..except-Block versucht:
"%systemroot%\System32\cmd.exe" konnte nicht gefunden werden. Stellen Sie sicher, dass Sie den Namen richtig eingegeben haben und wiederholen Sie den Vorgang.
Delphi-Quellcode:
Die Fehlermeldung bleibt leider die gleiche. Was muss ich ändern damit ich eigene Fehlermeldungen verwenden kann?
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; |
AW: Programm als Benutzer starten, wenn eigene Anwendung als Admin läuft
Wenn das andere Programm (der Explorer) den Fehler anzeigt und in der Funktion nicht als Exception oder Error-Code durchreicht, dann hast du ein Problem.
Bei uns kam jemand auf die saudämlihe Idee im Programm an einer zentralen Stelle quasi sowas zu machen
Delphi-Quellcode:
// hier wurde der Code misshandelt
procedure MachWas; begin try ... except on E: Exception do ShowMessage(E.Message); end; end; // und das hier war mein Code, der jetzt nicht mehr geht try MachWas; except ... end; |
AW: Programm als Benutzer starten, wenn eigene Anwendung als Admin läuft
Hallo,
vielleicht hilft ja SetErrorMode? Hier mit dem failcritical Parameter. |
AW: Programm als Benutzer starten, wenn eigene Anwendung als Admin läuft
Zitat:
Zitat:
|
AW: Programm als Benutzer starten, wenn eigene Anwendung als Admin läuft
So könntest Du es abändern um Windows-Fehlermeldungen zu schlucken.
Nur hier im Editor geändert, ungetestet, aber das Prinzip sollte einem dadurch klar werden. Zitat:
|
AW: Programm als Benutzer starten, wenn eigene Anwendung als Admin läuft
Zitat:
|
AW: Programm als Benutzer starten, wenn eigene Anwendung als Admin läuft
So als Idee:
Vom andemeldeten Benutzer (bzw. vom Desktop) das Token oder besser Elevated-Token besorgen und dann damit via CreateProcessAsUser oder CreateProcessWithLogonW das Programm starten. Oder du startest vorher dir ein zweites eigenes Programm (als Benutzer), redest dann via IPC mit dem und lässt dir von ihm das Programm starten. Also wie in den vielen "Programm als Administrator starten"-Fragen/Beispielen/Tutorials, nur andersrum. :angle: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz