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
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#1

AW: fehlende Rechte nach EXE start auf WIN7

  Alt 22. Okt 2013, 08:01
gelöscht
fork me on Github

Geändert von sx2008 (22. Okt 2013 um 08:06 Uhr) Grund: weil nicht passend
  Mit Zitat antworten Zitat
ZOD

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

AW: fehlende Rechte nach EXE start auf WIN7

  Alt 22. Okt 2013, 09:58
Ich bin nicht sicher, ob wir hier wirklich ein Pfadproblem haben.

Hier nochmals das "Kondensat" der Umgebung

(a) OS <= WinXP
Die Startroutine liegt auf einem Netzpfad und kopiert
die notwendigen Programmdateien lokal. Dabei wird zwar
auch u.U. einiges in das Windowsverzeichnis kopiert
(z.B. DLL), aber das eigentliche Programm kommt in
das Programmverzeichnis - meist also in

C:\Programme\RMPAS

Von dort wird es auch im CreateProcess gestartet (property PfadPASExeLok).

(b) Win7 64bit
Wie bei (a) liegt die Startroutine im Netz.
Damit das Kopieren funktioniert wird diese mit Admin Rechten
aufgerufen (Manifest). Das Kopieren klappt auch problemlos.
Das eigentliche Programm liegt dann (typischer Weise) in

C:\Program Files (x86)\RMPAS

und wird von dort auch gestartet. Beim Belegen des Properties PfadPASExeLok
wird mittels SHGetSpecialFolderLocation und CSIDL_PROGRAM_FILES der
Programmpfad vom System abgefragt und dann um das Installationsverzeichnis
der Anwendung erweitert (\RMPAS).

Das Debuggen muß ich noch ausprobieren.
Aus oben genanntem Zusammenhang heraus ich bin jedoch skeptisch, ob ich hier fündig werden.

Irgendwie kennt Win7 beim Aufruf der Exe aus der Startroutine heraus die Benutzerrechte bzw.
die Netwerkpfade nicht mehr ...
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.078 Beiträge
 
Delphi 12 Athens
 
#3

AW: fehlende Rechte nach EXE start auf WIN7

  Alt 22. Okt 2013, 10:32
Ja, den Zusammenhang, dass du eingangs von Adminrechten gesprochen hast und beim letzten Post von Netzwerkpfaden hatte ich übersehen.

Es ist so, dass ein Programm ebenfalls Adminrechte hat, wenn es von einem anderen Programm mit Adminrechten gestartet wird. Netzlaufwerke sind aber im Adminkontext nicht vorhanden, wenn sie nicht auch für das Admintoken des Users angelegt sind.

Deshalb machen eigentlich alle Update oder Installationsprogramme das so, dass die Anwendung danach mit normalen Rechten gestartet wird.

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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#4

AW: fehlende Rechte nach EXE start auf WIN7

  Alt 22. Okt 2013, 12:02
Noch allgemeiner formuliert: Netzlaufwerke sind seit Windows XP nutzerspezifisch (bei Win2k zwar ebenfalls, aber noch nicht so strikt getrennt wie bei XP+). D.h. jeder Nutzer hat seine eigenen Netzlaufwerke, so dass man bei Geschichten wie RunAs darauf achten muss. Das wäre dir übrigens auch aufgefallen, wenn du den Nutzerwechsel unter XP ebenfalls gemacht hättest - was nebenbei gesagt eine gute Idee wäre, denn momentan liest sich das so, als gingest du davon aus, dass der Nutzer Adminrechte hat...

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: fehlende Rechte nach EXE start auf WIN7

  Alt 22. Okt 2013, 12:35
Noch allgemeiner formuliert: Netzlaufwerke sind seit Windows XP nutzerspezifisch (bei Win2k zwar ebenfalls, aber noch nicht so strikt getrennt wie bei XP+). D.h. jeder Nutzer hat seine eigenen Netzlaufwerke, so dass man bei Geschichten wie RunAs darauf achten muss. Das wäre dir übrigens auch aufgefallen, wenn du den Nutzerwechsel unter XP ebenfalls gemacht hättest - was nebenbei gesagt eine gute Idee wäre, denn momentan liest sich das so, als gingest du davon aus, dass der Nutzer Adminrechte hat...

MfG Dalai
Hmm - also eigentlich ist es noch ne Ecke härter. Seit Windows Vista kann der Benutzer Adminrechte haben aber Prozesse laufen trotzdem ohne diese Rechte (Stichwort UAC). Hebt der Anwender jetzt unter Windows Vista / 7 einen Prozess in seinem eigenen Namen auf Adminrechteebene (selber USER!) - existieren die Netzlaufwerke noch sind aber nicht verbunden. Seit Windows 8 gibt es nicht mal mehr die Netzlaufwerke auf der Adminrechte-Ebene des selben Benutzers.

Aber das ist glaube ich nicht das Problem hier.

Gruß, Chris

[EDIT]
Is doch immer mal wieder gut, sein vermeintliches Wissen zu überprüfen. Die Aussage bzgl. Windows 8 / 8.1 stimmt nur wenn man die Netzlaufwerke per MSDN-Library durchsuchenWNetEnumResource macht. Prüft man hingegen hart jeden Laufwerksbuchstaben durch mit MSDN-Library durchsuchenWNetGetConnection scheint es die Verbindungen zu geben? Warum ist mir im Augenblick noch völlig unklar
[/EDIT]
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules

Geändert von ChrisE (22. Okt 2013 um 13:16 Uhr)
  Mit Zitat antworten Zitat
ZOD

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

AW: fehlende Rechte nach EXE start auf WIN7

  Alt 22. Okt 2013, 15:43
Danke für die Tipps an alle.

@Dalai
ich hatte bereits Nutzerwechsel im XP und im Win7 und unter W2K (ja - das tuckert auch noch manchmal ) gemacht.
Ergebnis: es gibt nur beim Win7 das geschilderte Problem.

Mittels procexp.exe habe ich nun mir die Properties der EXE nach dem Aufruf aus der
Startroutine heraus angeschaut und mit denen nach Aufruf per Doppelklick verglichen.

Ergebnis:

a) in beiden Fällen ist der richtige User angegeben.
@Dalai: dies gilt auch nach Userwechsel für unterschiedliche User.

b) beim Aufruf per Doppelklick ist als Parent "explorer.exe" angegeben,
beim Aufruf aus der Startroutine ist als Parent die Exe der Startroutine angegeben.

Wenn man den Startvorgang im procexp.exe beobachtet "hängt" die Programm-Exe als Prozess zuerst
unter dem Prozess der Startroutine. Dann beendet sich die Startroutine und die
Programm-Exe ist auf die oberste Ebene der Prozesshirachie verschoben.

Ich würde daher gerne die Programm-Exe aus der Startroutine mit dem parent
"explorer.exe" starten.
Kann mir jemand sagen, wie das gehen könnte?
Danke.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.078 Beiträge
 
Delphi 12 Athens
 
#7

AW: fehlende Rechte nach EXE start auf WIN7

  Alt 22. Okt 2013, 16:42
Ich würde daher gerne die Programm-Exe aus der Startroutine mit dem parent
"explorer.exe" starten.
Der Parent hat damit nichts zu tun, der ist rein informativ (lässt sich z.B. per WMI abfragen, ist aber auch nicht immer korrekt, z.B. wenn die Prozess ID des Parents schon neu vergeben wurde). Der Benutzerkontext ist das Entscheidende.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.078 Beiträge
 
Delphi 12 Athens
 
#8

AW: fehlende Rechte nach EXE start auf WIN7

  Alt 23. Okt 2013, 15: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
Antwort Antwort

 

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 16:56 Uhr.
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