AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Neuer Prozess im Benutzermodus (wenn Quellprogramm asAdminis
Thema durchsuchen
Ansicht
Themen-Optionen

Neuer Prozess im Benutzermodus (wenn Quellprogramm asAdminis

Offene Frage von "Exceeder"
Ein Thema von Exceeder · begonnen am 22. Apr 2009 · letzter Beitrag vom 23. Apr 2009
Antwort Antwort
Seite 2 von 2     12   
Exceeder

Registriert seit: 29. Mai 2006
24 Beiträge
 
#11

Re: Neuer Prozess im Benutzermodus (wenn Quellprogramm asAdm

  Alt 22. Apr 2009, 09:06
Hallo nochmal,

also hier mal meine StartProcess Funktion und meine ShellExecute Funktion. Eventuell weiß ja jemand was man da verändern muss, damit man zum Ziel kommt.

Delphi-Quellcode:
function StartProcess(const Filename: string; WaitFor: Boolean;
  ShowWindow: Boolean = False): Boolean;
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;

begin
  try
    FillChar(StartInfo, SizeOf(TStartupInfo), #0);
    FillChar(ProcInfo, SizeOf(TProcessInformation), #0);

    StartInfo.cb := SizeOf(TStartupInfo);
    StartInfo.dwFlags := STARTF_USESHOWWINDOW;
    StartInfo.wShowWindow := Abs(Integer(ShowWindow));

    if CreateProcess(nil, PChar(Filename), nil, nil, False, NORMAL_PRIORITY_CLASS, nil, PChar(ExtractFileDir(Filename)), StartInfo, ProcInfo) then
    begin
      if WaitFor then
        WaitForSingleObject(ProcInfo.hProcess, INFINITE);
                                    
      CloseHandle(ProcInfo.hProcess);
      CloseHandle(ProcInfo.hThread);
      Result := True;
    end
    else
      Result := False;
  except
    Result := False;
  end;
end;
Delphi-Quellcode:
function MyShellExecute(const Filename: string; const Parameters: string = '';
  const Operation: string = 'open'; const ShowCmd: Integer = SW_SHOWDEFAULT): Boolean;
begin
  Result := ShellExecute(0, PChar(Operation), PChar(Filename), PChar(Parameters), PChar(ExtractFilePath(Filename)), ShowCmd) > 0;
end;
Exceeder
  Mit Zitat antworten Zitat
Dust Signs

Registriert seit: 28. Dez 2004
Ort: Salzburg
379 Beiträge
 
#12

Re: Neuer Prozess im Benutzermodus (wenn Quellprogramm asAdm

  Alt 22. Apr 2009, 09:42
Vielleicht hilft dir das CREATE_PRESERVE_CODE_AUTHZ_LEVEL-Flag (siehe http://msdn.microsoft.com/en-us/libr...63(VS.85).aspx) oder ein expliziter Security-Descriptor (http://msdn.microsoft.com/en-us/libr...60(VS.85).aspx)

Dust Signs
(aka AXMD in der EE)
Die Nummer, die Sie gewählt haben, ist imaginär. Bitte drehen Sie Ihr Telefon um 90° und versuchen Sie es erneut.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#13

Re: Neuer Prozess im Benutzermodus (wenn Quellprogramm asAdm

  Alt 22. Apr 2009, 10:11
Zitat von Exceeder:
Bei CreateProcess scheint es zum Beispiel auch so zu sein, dass ein Programm welches im normalen Benutzerkontext arbeitet keinen Prozess erzeugen kann, welcher laut Manifest Administratorrechte benötigt. CreateProcess schlägt dann fehl (mit welcher Meldung genau weiß ich nicht mehr). Diesen Fall habe ich ja zum Beispiel, wenn das Hauptprogramm das Updatepaket herunterlädt und anschließend dann mit Setup.exe -update "MyZipPackage.zip" aufruft. Wenn man diesen Aufruf mit ShellExecute vornimmt erscheint korrekt die UAC und fragt den Benutzer, ob er das ganze zulässen möchte und fordert noch das Administratorpasswort an.

Hat soetwas denn noch niemand gemacht?
That's by design. Die UAC läuft auf dem Level von ShellExecute ab. CreateProcess ist eine ebene tiefer und hat keine Ahnung von UAC.
Daher sollte man nicht asAdmin ins Manifest schreiben, wenn das Prog auch mal als normaler User laufen soll. Man kann auch im Programm noch nachträglich einen neuen Prozess mit Adminrechten starten:
http://blog.delphi-jedi.net/2008/04/...in-privileges/
http://blog.delphi-jedi.net/2008/03/...ta-with-jwscl/



Zitat von Dust Signs:
Vielleicht hilft dir das CREATE_PRESERVE_CODE_AUTHZ_LEVEL-Flag (siehe http://msdn.microsoft.com/en-us/libr...63(VS.85).aspx) oder ein expliziter Security-Descriptor (http://msdn.microsoft.com/en-us/libr...60(VS.85).aspx)
Soweit ich mir denken kann ist CREATE_PRESERVE_CODE_AUTHZ_LEVEL für Prozesse in Jobs gedacht. Diese Prozesse kann man einschränken. Auch deren Kinder werden eingeschränkt. Jedoch ist es mit diesem Flag vermeidbar.
Ein SD bringt hier nix.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Exceeder

Registriert seit: 29. Mai 2006
24 Beiträge
 
#14

Re: Neuer Prozess im Benutzermodus (wenn Quellprogramm asAdm

  Alt 22. Apr 2009, 17:52
Hallo again,

das Problem ist aber auch beim starten als Administrator ohne ein Vista Manifest mit asAdministrator, dass der Prozess dennoch neue Prozesse mit dem gleichen Benutzerlevel startet, wenn es dann doch mal als Administrator ausgeführt wird. Aber: Die Administrations/Installations und das Hauptprogramm sind ohnehin strickt getrennt. Es gibt also keinen Grund den Prozess nicht immer als Administrator auszuführen. Unter Windows XP verfolgt das Administrationsprogramm und auch das Installationsprogramm eine ähnliche Strategie (mit runas), um auch dort nur als Administrator ausgeführt zu werden. Der Link zur Funktion JwShellExecute auf der angegebenen Webseite ist übrigens Tot. Die Gesamte Jedi Lib für das Problem zu installieren, kommt aber zumindest für mich nicht in Frage. Keine Ahnung, ob die Routine da rauskopiert werden dürfte.

Eventuell ist die runas Geschichte aber die Lösung, um das Hauptprogramm am Ende des Setups mit
MyShellExecute('runas <currentLoggedInUser> Hauptprogramm.exe'); aufzurufen. Die Frage ist nun, wie fülle ich <currentLoggedInUser> mit dem richten Wert? Wenn ich mir die Wobei ich immer noch kaum glauben kann, dass es für dieses Problem keinen offiziellen Weg geben soll.

In Post #3 hat nicodex geschrieben, dass der offizielle weg über den Task Scheduler führen soll, allerdings kann man diesen Dienst in jedem Windows deaktivieren und dann läuft die Geschichte dort auch nicht mehr. Die Frage ist auch, ob man wirklich erst umständlich dort eine Aufgabe eintragen muss (über irgendein dolles Windows API), um einen Prozess in einem anderen Benutzerkontext zu starten. Denn ich will ja das Programm ohnehin sofort (also ohne Zeitverzögerung starten).

Wie machen das denn MSI Installer wie zum Beispiel InstallAware, die bieten ja beim Abschluss der Installation ähnliche Optionen an, hat da jemand Erfahrungen?

Exceeder
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#15

Re: Neuer Prozess im Benutzermodus (wenn Quellprogramm asAdm

  Alt 22. Apr 2009, 18:21
Thx, habe den Link angepasst. Die Umstellung der Hilfe hat die URL geändert.

Der MS Installer verwendet einen bereits installierten Dienst, der das alles abwickelt.

Tipp: Verwende CreateProcessAsUser statt CreateProcess.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Exceeder

Registriert seit: 29. Mai 2006
24 Beiträge
 
#16

Re: Neuer Prozess im Benutzermodus (wenn Quellprogramm asAdm

  Alt 23. Apr 2009, 15:01
Hallo,

habe wohl in meiner ersten Suche (bevor ich den Thread aufgemacht habe) nicht richtig gesucht. Bin gerade per Google Suche über das gleiche Thema hier in der Delphi Praxis gestolpert. Eine komplett zufriedenstellende Lösung gibt es dort zwar noch nicht, aber zumindest weitere Anhaltspunkte.

Falls noch jemand Ideen dazu hat, würde ich mich freuen noch was zu hören. Ansonsten melde ich mich nochmal, wenn ich eine Lösung gefunden habe, die funktioniert.

Exceeder
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:15 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