Entwickler-Ecke

Dateizugriff - Registrierung geht unter W7 nicht mehr ...


myownshadow - Do 29.10.09 23:47
Titel: Registrierung geht unter W7 nicht mehr ...
Hallo !
Bislang habe ich mein Programm immer wie folgt erfolgreich registrieren können:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
 procedure TTurnierplaner.ExtRegistrieren(var Schluss : Boolean);
var
  R: tWinRegistry;
begin

  R := TWinRegistry.CreateWithKey(HKEY_CLASSES_ROOT,'');
  Schluss := False;

  try
    (* Zuordnung der Extension zu einer Bezeichnung *)
    R.WriteString('.tnp','','Turnierplaner_Datei');

    (* Erläuternder Text, erscheint z.B. im Explorer *)
    R.WriteString('Turnierplaner_Datei','',TPRegName);

    (* Der Extension zugeordnetes ICON. Achtung: Die Icons sind durchnummeriert !!! *)
    R.WriteString('Turnierplaner_Datei\DefaultIcon','',Application.EXEName+',0');
    
    (* Programmaufruf, wenn die Datei "Ausgeführt" (Doppelclick) wird. *)
    R.WriteString('Turnierplaner_Datei\Shell\open\command','',Application.EXEName+' "%1"');

  (* Exception Behandlung *)
  except
    MessageDlg('Sie benötigen Administratorrechte um das Programm zu registrieren !!!',
                mtError,[mbok],0);
    Schluss := True;
  end;
  R.CloseKey;
end;


Doch das geht plötzlich unter Windows 7 nicht mehr.
obwohl ich als Administrator angemeldet, werden mir die Schreibrechte verweigert.
Was muss ich nun anders machen ?
Vielen Dank


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Fr 30.10.2009 um 10:49


elundril - Fr 30.10.09 00:24

Arbeitest du nur als Administrator oder forderst du auch Adminrechte an? ich glaub das is nämlich n unterschied.

lg elundril


Delete - Fr 30.10.09 01:52

Administrator ist seit Windows Vista nicht gleich Administrator. Erstmal ist ein Administrator auch nur ein normaler Benutzer. Er kann aber, wenn gefordert, administrative Rechte bekommen. Zum Beispiel wenn ein Manifest der Anwendung beiliegt, das diese administrativen Rechte für die Anwendung anfordert. Die Suche sollte hier alles weitere klären.


myownshadow - So 08.11.09 19:35

Ich habe nun einiges über Manifeste gelesen.
Mit dem Manifest-Creator (http://www.delphipraxis.net/post1075571.html#1075571) habe Ich mir eines erstellt.
Das Einzige was aber passiert ist, dass meine Entwicklungsumgebung total abschmiert mit der Fehlermeldung: "Ungültige Prozess ID:0". Es hilft nur noch der Taskmanager ...

Datei Turnier.exe.manifest:

XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    version="6.6.1.1"
    processorArchitecture="X86"
    name="Private.Turnier.Turnierplaner"
    type="Win32"/>
  <description>Der kleine Turnierplaner benoetigt Adminrechte</description>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
    </application>
  </compatibility>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
</assembly>


Was läuft denn hier falsch ?
Mit abgeschalteter Benutzerkontensteuerung läuft das Programm unter W7 einwandfrei durch.
Vielen Dank.


jaenicke - So 08.11.09 19:54

Delphi kann keine Adminprozesse debuggen, wenn es selbst keine Adminrechte hat. Du musst Delphi also selbst mit Adminrechten starten.

Die bessere Alternative wäre nur für das Registrieren die Rechte anzufordern statt einfach immer die UAC aufgehen zu lassen, egal ob das nötig ist... :roll: (es sei denn der einzige Sinn des Programms ist diese Registrierung / Installation)


myownshadow - So 08.11.09 20:24

Ja, wenn ich mein Programm ohne Delphi starte, dann funktioniert es.

Deine Annahme ist richtig, ich benötige die Rechte nicht während des Programmlaufes. Sie sind immer nur dann notwendig, wenn ich in die Registry schreibe. Also beim erstmaligen Registrieren und abschließend wenn ich Programmeinstellungen speichern will.

Wie kann ich mir die Rechte denn setzen ?


jaenicke - So 08.11.09 20:28

Indem du die eigene Exe mit einem entsprechenden Parameter startest. Wenn du das mit ShellExecute machst und statt 'open' das Verb 'runas' angibst, werden Adminrechte angefordert. Ob du diese schon hast kannst du mit IsUserAnAdmin [http://msdn.microsoft.com/en-us/library/bb776463.aspx] feststellen.

Ist der Parameter angegeben führst du (im Projektquelltext, also Projekt --> Quelltext anzeigen) statt der Anzeige des Hauptformulars die Registrierung usw. durch.


Delete - So 08.11.09 20:46

user profile iconmyownshadow hat folgendes geschrieben Zum zitierten Posting springen:
wenn ich Programmeinstellungen speichern will.

Wozu braucht man dazu administrative Rechte? Programmeinstellungen legt man normalerweise in HKCU ab oder was sind das für Programmeinstellungen?