Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   fehlende Rechte nach EXE start auf WIN7 (https://www.delphipraxis.net/177164-fehlende-rechte-nach-exe-start-auf-win7.html)

jaenicke 23. Okt 2013 15:42

AW: fehlende Rechte nach EXE start auf WIN7
 
Wie ich schon schrieb:
Zitat:

Zitat von jaenicke (Beitrag 1232716)
Ich selbst habe das in meinem (leider nicht mehr weiterentwickelten) in die Anwendung integrierten Updater so gemacht, dass diese kein Adminmanifest enthält, sondern sich selbst als Admin neu startet, aber selbst weiter läuft. Die Admininstanz benennt die Exe nur um, legt die neue Version dort hin und diese wird dann von der ursprünglichen Instanz ohne Adminrechte wieder im selben Benutzerkontext gestartet. (Dann wird die ursprüngliche Instanz beendet und die Admininstanz löscht die umbenannte alte Version.)

Normale Installer machen das natürlich anders, diese ermitteln den Benutzerkontext und starten die Anwendung mit diesen Privilegien. In Inno Setup solltest du sehen können wie das geht, das ist ja Open Source.

Wie diese Installer das machen, weiß ich selbst nicht genau. Es gibt zwar CreateProcessAsUser usw., aber damit habe ich mich nie beschäftigt...

p80286 23. Okt 2013 16:16

AW: fehlende Rechte nach EXE start auf WIN7
 
Zitat:

Zitat von ChrisE (Beitrag 1232896)
Ob man sie öffnen kann oder nicht, hängt nur davon ab:
  1. Ist der Pfad und Dateiname korrekt
  2. Habe ich / der Prozess das Recht die Datei / den Pfad zu öffnen / zu lesen

Einspruch, das ist nicht ganz richtig, wenn eine Datei auf "Readonly" steht kann es durchaus Fehlermeldungen geben (filemode);

Zitat:

Zitat von ChrisE (Beitrag 1232896)
Ich glaube es wäre an der Zeit zu zeigen:
  • wie du die Datei öffnest
  • woher die Informationen zum Dateinamen inkl. Pfad kommen
  • welche Rechte auf der eigentlichen Zieldatei eingetragen sind

Dem wäre eigentlich nur noch die konkrete Fehlermeldung hinzuzufügen.

Gruß
K-H

ZOD 23. Okt 2013 16:42

AW: fehlende Rechte nach EXE start auf WIN7
 
@p80286
ich will wirklich nicht ungeduldig klingen, aber ich hatte
die Hoffnung, daß meine bisherigen Posts - vor allem der letzte -
Zitat:

Zitat von ZOD (Beitrag 1232909)
@Chris
Kurzantwort
Der Zugriff auf die Dateien erfolgt mit ShellExecute, die Pfadnamen sind
in einer DB gespeichert mit "hart" vorgegebenen LW-Buchstaben.

Langantwort:
Öffne ich aus dem Programm heraus das Verzeichnis einer der ""Problem-Dateien" mit


Delphi-Quellcode:
ShellExecute(Application.Handle, 'explore', PChar(Directoryname), nil, nil, SW_SHOWNORMAL);


so bekomme ich als Rückgabewert
"5" - also
"Fehler beim gemeinsamen Zugriff auf eine Datei im Netz oder Fehler beim Zugriff auf eine gesperrte Datei im Netz."

Wenn ich dann aus genau dem jetzt laufenden Programm heraus einen Explorer für das EXE-Verzeichnis starte mit

Delphi-Quellcode:
ShowDirectory(ExtractFilePath(Application.ExeName))


Dann kann ich mich darin bis zum ursprünglichen Verzeicnis durchklickern
und bekomme hier auch alle Dateien angezeigt und kann diese per Doppelkklick öffnen.

Die Pfade sind wie geschildert "hart" in einer DB gespeichert, incl. Laufwerksbuchstaben.
(Wir verwenden für einige Server Volumes fest vergebene LW-Buchstaben).

Die Rechte auf die Zieldatei sind da - sonst könnte ich sie ja nicht wie
oben geschildert im aus dem Programm heraus gestarteten Explorer anzeigen.

Für die Anzeige wird ein normales ShellExecute verwendet, zuerst wird
das Programm für die Anzeige über die FileExtension ermittelt und dieses
dann ebenfalls per ShellExecute aufgerufen. Klappt hervorragend bei OS <= XP.

Ich verstehe einfach nicht, warum der Benutzer einmal die Rechte hat und
ein andermal die Rechte nicht hat.


diese Fragen beantwortet.

Naja - ich bin sicher auch etwas genervt, da ich hier nicht vorwärts komme,
oder mich zu blöde anstelle.

Einmal andersherum gefragt:
wie starte ich einen Prozess (z.B. über CreateProcessAsUser) für den aktuell
am OS angemeldeten Benutzer (NICHT den Benutzer meiner Startroutine wg. Admin-Recht
) ohne daß der Benutzer jedesmal sein PW neu eintippen muß?

Gefunden habe ich bisher

http://www.delphipraxis.net/884994-post13.html

hier geht es aber um Registry-Einträge.

musicman56 23. Okt 2013 20:04

AW: fehlende Rechte nach EXE start auf WIN7
 
Hallo nochmal,

hast du es wirklich schon mit ShellExecuteEx als Administrator versucht?

Delphi-Quellcode:
function ShellExec(aHandle: HWND; FileName, Parameters, Directory: string;
                   ShowCmd: Integer; AsAdmin, Wait: boolean): Boolean;
var
  SEI: TShellExecuteInfo;
begin
  FillChar(SEI, SizeOf(SEI), #0);
  SEI.cbSize := SizeOf(SEI);
  SEI.Wnd := aHandle;
  SEI.fMask := SEE_MASK_NOCLOSEPROCESS;
  if AsAdmin then SEI.lpVerb := 'runas'
  else SEI.lpVerb := 'open';
  SEI.lpFile := PChar(FileName);
  SEI.lpParameters := PChar(Parameters);
  SEI.lpDirectory := PChar(Directory);
  SEI.nShow := ShowCmd;
  Result := ShellExecuteEx(@SEI);
  if Result then
  if Wait then begin
    if SEI.hProcess > 32 then begin
      WaitForInputIdle(SEI.hProcess, INFINITE);
      WaitForSingleObject(SEI.hProcess, INFINITE);
    end;
  end;
  CloseHandle(SEI.hProcess);
end;

jaenicke 23. Okt 2013 20:18

AW: fehlende Rechte nach EXE start auf WIN7
 
Und noch einmal:
Es geht darum aus einem Adminprozess einen Prozess im Usermode zu starten, nicht umgekehrt. Adminrechte hat er dank Manifest schon.

musicman56 23. Okt 2013 22:20

AW: fehlende Rechte nach EXE start auf WIN7
 
Zitat:

Zitat von ZOD (Beitrag 1232909)
Ich verstehe einfach nicht, warum der Benutzer einmal die Rechte hat und ein andermal die Rechte nicht hat.

Aus diesem Grund ist ja mein Grundgedanke, wenn der erste Prozess als Admin (mit ShellExecuteEx) gestartet wird, und die Adminrechte an die von diesem Prozess ebenfalls mit ShellExecuteEx gestarteten Prozesse weitergereicht werden, dann müsste es doch gehen. Aber vielleicht täusche ich mich ja auch, und darum halte ich mich jetzt besser raus.

jaenicke 23. Okt 2013 22:28

AW: fehlende Rechte nach EXE start auf WIN7
 
Zitat:

Zitat von musicman56 (Beitrag 1232953)
Aus diesem Grund ist ja mein Grundgedanke, wenn der erste Prozess als Admin (mit ShellExecuteEx) gestartet wird, und die Adminrechte an die von diesem Prozess ebenfalls mit ShellExecuteEx gestarteten Prozesse weitergereicht werden, dann müsste es doch gehen.

Der Adminprozess hat die Zugriffsmöglichkeit aber gerade nicht, nur der normale Benutzer. Deshalb ist das was du beschreibst das Problem und nicht die Lösung.

ZOD 24. Okt 2013 09:56

AW: fehlende Rechte nach EXE start auf WIN7
 
Guten Morgen zusammen,

meine Suche im allwissenden Netz war bisher recht erfloglos.

Zum Thema "run as administrator" or "elevated" gibt es viel.

Dazu, wie ein Prozess aus einem "elevated" gestarteten Prozess im
Kontext des angemeldeten Users heraus gestartet werden kann,
finde ich nichts.

Neue Idee:
die Startroutine erzeugt einen Eintrag im Task Scheduler, der
das eigentliche Programm startet (ja - ist mit der Speerspitze durch die Brust ins Auge gezielt).
Hat mir dazu jemand einen Tip, wie ich das machen könnte?

Danke.

jaenicke 24. Okt 2013 11:16

AW: fehlende Rechte nach EXE start auf WIN7
 
Ich habe keine Zeit, habe aber mal ganz kurz geschaut, ins Auge gesprungen sind mir diese Funktionen:
CreateRestrictedToken
CreateProcessWithToken
Ob es das ist, kann ich jetzt nicht schauen.

ZOD 25. Okt 2013 07:30

AW: fehlende Rechte nach EXE start auf WIN7
 
Guten Morgen,

nach einigem Herumprobieren und Suchen bin ich auf

http://stackoverflow.com/questions/1...785337#2785337


gestoßen und kann nun endlich auch unter Win7 mit folgendem Code
mein Programm aus der Startroutine heraus so starten, daß die Dateizugriffe keine
Fehler mehr ergeben:

Delphi-Quellcode:
      tmpS := IncludeTrailingPathDelimiter(GetEnvironmentVariable('WINDIR')) + 'explorer.exe';
      tmpS1 := '"' + Trim(ProgDateiPfad) + Trim(' ' + Trim(ProgParameter)) + '"';
      tmpExitCode :=
        ShellExecute(
         GetDesktopWindow,
         'open',
         PChar(tmpS),
         PChar(tmpS1),
         nil,
         SW_SHOWNORMAL);
      tmpLastOSError := GetLastError;
      result := tmpLastOSError <> 0;

Nun habe ich (natürlich) ein neues Problem:
bei jedem Aufruf kommt die Sicherheitswarnung

Dateidownload - Sicherheitswarnung
Möchten Sie diese Datei speichern oder ausführen?

Und nach Klick auf <Ausführen> natürlich noch

Windows Explorer - Sicherheitswarnung
Der Herausgeber konnte nicht verifiziert werden.
Möchten Sie diese Software ausführen.

Hat jemand eine Idee, wie ich ohne Verstellen der Sicherheitsstufe
an jeder Workstation diese Meldungen loswerde?

Danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 Uhr.
Seite 3 von 4     123 4      

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