Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi CodeSite Studio 5.3.2 funktioniert plötzlich nur mehr mit Administrator privileges! (https://www.delphipraxis.net/197188-codesite-studio-5-3-2-funktioniert-ploetzlich-nur-mehr-mit-administrator-privileges.html)

KodeZwerg 22. Jul 2018 19:04

AW: CodeSite Studio 5.3.2 funktioniert plötzlich nur mehr mit Administrator privilege
 
Zitat:

Zitat von PeterPanino (Beitrag 1408329)
Oder kennt jemand einen Trick, mit dem man das auf eine andere einfachere Weise erreichen könnte?

Per Commandline Aufruf sollte das möglich sein, hier ein Batch Auszug:
Delphi-Quellcode:
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"

PeterPanino 22. Jul 2018 22:05

AW: CodeSite Studio 5.3.2 funktioniert plötzlich nur mehr mit Administrator privilege
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von KodeZwerg (Beitrag 1408330)
Per Commandline Aufruf sollte das möglich sein, hier ein Batch Auszug:
Delphi-Quellcode:
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"

Hallo KodeZwerg,

vielen Dank für deinen genialen Gedanken!

Leider funktioniert es nicht so, wie ich es mir gewünscht habe.

Also, ich habe eine Batch-Datei "test.bat" mit diesem Inhalt erstellt:

Code:
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" F:\delphi\_test\StartUnelevatedProgramFromElevatedProgram\Win32\Debug\StartUnelevatedProgramFromElevatedProgram.exe"
Wenn ich diese Batch-Datei doppelklicke, wird wie gewünscht mein Programm gestartet. So weit so gut.

Nun versuche ich mal, das Ganze von meinem elevated Programm aus zu starten:

Delphi-Quellcode:
procedure TForm3.btnRestartNotElevatedClick(Sender: TObject);
begin
  JclShell.ShellExecEx('F:\delphi\_test\StartUnelevatedProgramFromElevatedProgram\Win32\Debug\test.bat');
  Close;
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
  // wer MiTeC nicht hat, einfach einen anderen Code verwenden oder auskommentieren:
  if MiTeC_Routines.IsElevated then
    Self.Caption := 'Elevated'
  else
    Self.Caption := 'NOT Elevated';
end;
Ich starte also meine App mit höheren Rechten: KontextMenü im Windows-Explorer -> "Run as Administrator". Nach dem UAC prompt started dann die App elevated.

Dann klicke ich auf den Button: Das Programm startet die Batch-Datei, schließt sich selbst, und die App wird neu gestartet. Aber leider wieder elevated!

Im Anhang ist der Source-Code:

Anhang 49575

Uwe Raabe 22. Jul 2018 22:20

AW: CodeSite Studio 5.3.2 funktioniert plötzlich nur mehr mit Administrator privilege
 
Zitat:

Zitat von PeterPanino (Beitrag 1408340)
Das Programm startet die Batch-Datei, schließt sich selbst, und die App wird neu gestartet. Aber leider wieder elevated!

Das ist auch nicht verwunderlich, da AsInvoker ja die Rechte des aktuellen Benutzers verwendet. Der ist aber in dem Moment nun mal Admin.
Zitat:

asInvoker – Run with limited user rights unless specifically elevated or called from an already elevated process

PeterPanino 22. Jul 2018 22:33

AW: CodeSite Studio 5.3.2 funktioniert plötzlich nur mehr mit Administrator privilege
 
Vielen Dank, Uwe.

Gibt es also keinen Trick, von einem elevated Programm aus sich selbst als nicht-elevated neu zu starten?

Uwe Raabe 23. Jul 2018 08:17

AW: CodeSite Studio 5.3.2 funktioniert plötzlich nur mehr mit Administrator privilege
 
Zitat:

Zitat von PeterPanino (Beitrag 1408344)
Gibt es also keinen Trick, von einem elevated Programm aus sich selbst als nicht-elevated neu zu starten?

Mir ist zumindest kein offizielles Verfahren bekannt.

In der madCollection gibt es in madKernel aber eine Funktion NewProcessAsUser. Vielleicht kann man damit was erreichen, aber ich kann das gerade nicht ausprobieren.

KodeZwerg 23. Jul 2018 09:09

AW: CodeSite Studio 5.3.2 funktioniert plötzlich nur mehr mit Administrator privilege
 
Ich nutze den Befehl von oben in meiner Registry, hab da ein "Run without Rights" angelegt, das Gegenstück zu "Run as Admin" sozusagen.

Wenn das Ziel UAC beinhaltet und setzen will, kann sein das es dann generell nicht fruchtet.

Was mir noch einfällt wäre der Befehl RUNAS.
Da müsstest Du eventuell erst Richtlinien selber basteln, testen ob das nötig ist kannst Du so:
Öffne eine Commandline (mit/ohne Rechte sollte egal sein)
Tippe "runas /showtrustlevel" ein und drück Eingabetaste.
Je nachdem was Dir da Angezeigt wird kannst Du nun per "runas /trustlevel" switch etwas mit von Dir bestimmten Rechten ausführen. Auch aus Delphi heraus ohne batch oder der gleichen. Wichtig ist halt das eine Richtlinie existiert.

himitsu 23. Jul 2018 09:27

AW: CodeSite Studio 5.3.2 funktioniert plötzlich nur mehr mit Administrator privilege
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1408359)
Zitat:

Zitat von PeterPanino (Beitrag 1408344)
Gibt es also keinen Trick, von einem elevated Programm aus sich selbst als nicht-elevated neu zu starten?

Mir ist zumindest kein offizielles Verfahren bekannt.

In der madCollection gibt es in madKernel aber eine Funktion NewProcessAsUser. Vielleicht kann man damit was erreichen, aber ich kann das gerade nicht ausprobieren.

MSDN-Library durchsuchenCreateProcessWithLogonW, MSDN-Library durchsuchenCreateProcessAsUser
oder selbst SecurityAttribute besorgen und MSDN-Library durchsuchenCreateProcess.
Problem dabei ist, dass dort wohl überall ohne das UAC der User mit den vollen angeforderten Rechten gestartet wird.

Eventuell über die Aufgabenplanung versuchen? (dort eintragen, dass der Prozess in aktuelle Zeit + x Sekunden gestartet werden soll)

Ich weiß jetzt nicht welche Rechte das UAC standardmäßig deaktiviert ... eventuell kann man seine eigenen Berechtigungen klonen, jene Berechtigungen entfernen und dann damit den Prozess starten.

KodeZwerg 13. Aug 2018 04:33

AW: CodeSite Studio 5.3.2 funktioniert plötzlich nur mehr mit Administrator privilege
 
Eine funktionierende Lösung wäre es über den Task Scheduler laufen zu lassen.
Vielleicht mit dem VCL Task Scheduler als Hilfe, ob der das macht was ich meine habe ich selbst noch nicht getestet, aber rein von der Logik her funktioniert es so (mit dem Windows Task Scheduler).


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:06 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz