AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) fehlende Rechte nach EXE start auf WIN7
Thema durchsuchen
Ansicht
Themen-Optionen

fehlende Rechte nach EXE start auf WIN7

Ein Thema von ZOD · begonnen am 21. Okt 2013 · letzter Beitrag vom 25. Okt 2013
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#21

AW: fehlende Rechte nach EXE start auf WIN7

  Alt 23. Okt 2013, 16:42
Wie ich schon schrieb:
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...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#22

AW: fehlende Rechte nach EXE start auf WIN7

  Alt 23. Okt 2013, 17:16
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);

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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
ZOD

Registriert seit: 6. Mai 2009
97 Beiträge
 
#23

AW: fehlende Rechte nach EXE start auf WIN7

  Alt 23. Okt 2013, 17:42
@p80286
ich will wirklich nicht ungeduldig klingen, aber ich hatte
die Hoffnung, daß meine bisherigen Posts - vor allem der letzte -
@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


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

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.
  Mit Zitat antworten Zitat
musicman56
(Gast)

n/a Beiträge
 
#24

AW: fehlende Rechte nach EXE start auf WIN7

  Alt 23. Okt 2013, 21:04
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;
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#25

AW: fehlende Rechte nach EXE start auf WIN7

  Alt 23. Okt 2013, 21:18
Und noch einmal:
Es geht darum aus einem Adminprozess einen Prozess im Usermode zu starten, nicht umgekehrt. Adminrechte hat er dank Manifest schon.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
musicman56
(Gast)

n/a Beiträge
 
#26

AW: fehlende Rechte nach EXE start auf WIN7

  Alt 23. Okt 2013, 23:20
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#27

AW: fehlende Rechte nach EXE start auf WIN7

  Alt 23. Okt 2013, 23:28
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
ZOD

Registriert seit: 6. Mai 2009
97 Beiträge
 
#28

AW: fehlende Rechte nach EXE start auf WIN7

  Alt 24. Okt 2013, 10:56
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#29

AW: fehlende Rechte nach EXE start auf WIN7

  Alt 24. Okt 2013, 12:16
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
ZOD

Registriert seit: 6. Mai 2009
97 Beiträge
 
#30

AW: fehlende Rechte nach EXE start auf WIN7

  Alt 25. Okt 2013, 08:30
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      

 

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 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