Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 06, 2025 00:03

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Delphi und Vista
BeitragVerfasst: Mo Jun 08, 2009 09:14 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Ich versuche gerade mein Mediaplayer Xenorate Vista Fähig zu machen.

Nur leider ist es unter Vista so, das folgende funktionen in bestimmten fällen nicht mehr funktionieren:

Functionen die erst mit UAC laufen:

- Registry Zugriffe (LOCAL_MACHINE, CLASSES_ROOT)
- Zugriff auf alle Verzeichnisse die nicht in im Benutzer ordner "C:\Dokumente und Einstellungen\Mein Benutzername" liegen, z.b. C:\Programme.

Funktionen die ohne UAC laufen wenn Benutzer Admin werden kann

- Global Hooks (Funktionieren nur wenn Logged in User Admin rechte besitzt, muss diese auch nicht per UAC bestätigen, was ich schon komisch finde, weil laut Windows Vista Specification sollte das nicht mehr laufen.)

Ist situation

Das sorgt nun dafür wenn ich z.b. in HKEY_LOCAL_MACHINE\Software\Xenorate schauen will, ob ein bestimmter Registry zugriff gesetzt ist,
wird ein Access Denied zurückliefert.

Explorer shell integration nicht zur laufzeit änderbar da kein Zugriff auf HKEY_CLASSES_ROOT.

Ich kann keinerlei System Informationen aus der Registry auslesen, DirectX Version, Soundkarten Informationen, CPU Infos etc. Nix.

Dateien die im Programm Installationsordner "C:\Programme\Xenorate" liegen,
können nicht gelesen und gefunden werden (TSearchRec).

Tastatur/Mediakey gehen nicht mehr, da Hooks nicht aktiviert werden können.




Ich habe im Netz zu den Problemen Generell erstmal nur "Vista Manifest" gefunden,
welches Vista sagt, welche Rechte die Anwendung benötigt.

Dazu benötigt man pro Assembly (Anwendung, DLL) ein Manifest,
welches im Grunde das alte XP Manifest (XML) ist,
mit einer neuen Sektion welches den security level festlegt:

- AsInvoker
- RequireAdministrator (Beim starten der Anwendung wird nach Admin rechten gefragt)
- HighestAvailable (Beim starten der Anwendung wird nach Admin rechten gefragt, sofern der eingeloggte Benutzer Admin rechte verfügt)



Xenorate als RequireAdministrator zu starten, wäre Fatal, weil für jeden Aufruf der Xenorate.exe erscheint der UAC Dialog.

Da man auch Xenorate im Explorer (Shell) benutzen kann um Dateien direkt abzuspielen oder nur in die Playlist zu packen,
wird für jede Datei/Ordner die markiert sind, die Xenorate exe geöffnet.
Wenn nun Admin im Manifest steht, wird für jeden Aufruf der "Admin rechte benötigt" Dialog aufgerufen,
welches ich wohl nicht erwähnen brauche Extremst nervig ist.

Somit muss ich Xenorate doch als "asInvoker" deklarieren, welches dafür sorgt das sehr viel unter Vista nicht mehr funktioniert:

- Wahl der Soundkarte für Musik Wiedergabe nicht möglich. (BASS benutzt Standard Device)
- Teile des Videosystems laufen nicht mehr, welches dafür sorgt das auch keine DVD mehr abgespielt werden kann.
- Tastatur und Media Hotkeys gehen gar nicht mehr

Nun die frage für euch:

Wie würdet ihr das angehen, das die folgenden Punkte die Oben beschrieben sind, trotzdem unter Vista laufen,
sowie eine Explorer Integration sauber funktioniert ?



Gibt es einen Speicherort, indem ich lesen kann, wo ich meine Config und Datenbank Dateien packe, anstatt die Dateien in "C:\Programme\Xenorate" zu speichern ?

Danke,
Final


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 08, 2009 10:01 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Du musst die Pfade entsprechend anpassen.
So ist HKEY_LOCAL_MACHINE\Software\Xenorate auch falsch und es sollte zu HKEY_CURRENT_USER werden.
Genauso bei C:\Programme\Xenoreate zu "C:\Dokumente und Einstellungen\User\Anwendungsdaten\Xenorate".
Der Grund dahinter ist recht einfach: Die Werte werden pro User getrennt gespeichert und nicht mehr global.
Und selbst wenn es global sein sol, gibt es noch immer "All Users".

Bei Explorer Shell Integration weißt du darauf hin, dass du Administratorrechte benötigst um die Einstellung zu ändern.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 08, 2009 11:28 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Kann man nicht eine gesonderte Exe zur Shellintegration nutzen?

XenorateShellHelper.exe z.b.? Die dann prüft ob Xenorate schon läuft und per message infos überträgt. Oder bräuchte die dann auch Adminrechte?

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 08, 2009 13:57 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
damadmax hat geschrieben:
Kann man nicht eine gesonderte Exe zur Shellintegration nutzen?

XenorateShellHelper.exe z.b.? Die dann prüft ob Xenorate schon läuft und per message infos überträgt. Oder bräuchte die dann auch Adminrechte?


Das wäre eine Idee, man brauch da ja keine Admin rechte um per Pipe Xeno eine Nachricht zu schicken.

Problematisch wird das ganze wenn Xenorate nicht läuft, der Shellhelper muss dann halt die gewählte Datei/Òrdner in den speicher packen,
Xenorate per Shell exe starten und den käse übergeben.

Die Datenbankdateien werd ich dann wohl oder übel in "All users" auslagern, da ich will das xeno auch mit allen Benutzern ausgeführt werden kann.

Es wird übrigens schon seit langem der Anwendungsordner\Xenorate genutzt um Config, sowie User Customizations zu speichern.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Probleme
BeitragVerfasst: Fr Jun 12, 2009 18:51 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
So ich habe das jetzt mal umgesetzt mit der Umstellung von den Pfaden.

Es wird der "All Users" pfad verwendet für alle Dateien die zur Laufzeit benötigt werden.

Hab das im Innosetup umgestellt, hat auch gut funktioniert.

Unter XP läuft das prima, er installiert die Programm Dateien (EXE, DLL) in das "C:\Programme\Xenorate" verzeichnis und
die Laufzeit-Dateien, so nenn ich diese werden sauber in "C:\ProgramData\Xenorate" gespeichert.

So da es mir aber nicht um XP geht, sondern um Vista hab ich das ganze dran mal auf meinem Notebook installiert (Vista Business x86 SP1)

Es scheint ein griff ins Klo gewesen zu sein, denn es hat kein Unterschied gemacht, ich kann somit immer noch nicht auf meine Laufzeit-Dateien zugreifen. :(



Um mal genau aufzuschlüsseln was in meinem vista passiert:

- Programm Dateien werden nach "C:\Programme\Xenorate" installiert.
- Laufzeit Dateien werden nach "C:\ProgramData\Xenorate" installiert.
- User Dateien werden nach C:\Users\final\AppData\Roaming\Xenorate gespeichert.

Der Laufzeit Pfad wird korrekt ausgelesen mit FOLDERID_ProgramData, welches auch der richtige Vista way ist laut MSDN.

Fakt ist aber sobald ich versuche eine Simple FileExists() abfrage auf eine bestimmte Datei zu machen, welche in dem Laufzeit Ordner liegt,
krieg ich immer False zurück. Somit kann ich meine DirectShow scripts und XML Dateien nicht lesen.



Was soll ich tun ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 12, 2009 19:54 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Es geht nun mit folgendem Ansatz:

Ich installiere nun meine Laufzeit Dateien in "\User\AppData\Xenorate".
Also das Verzeichnis wo die Configs etc auch gespeichert werden.

Das aber auch nur wenn Vista als OS erkannt wurde,
ansonsten ganz normal im Program Files.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]