none
Altes Thema Registry Rechte unter .NET und Windows 7 RRS feed

  • Frage

  • Ich arbeite mit VB.NET 2008 und nutze integrierten Installer für Installationsprogramm meines Produkts.
    Im Installer werden ein paar globale Keys unter HKEY_LOCAL_MACHINE\SOFTWARE\<company>\<product> angelegt (<company> = meine Firma, <product>=mein Preoduktname)

    Unter Windows 7 und Vista mit eingeschalteter Benutzerkontensteuerung habe ich (obwohl Admin) keinen schreibenden Zugriff auf mein globales Registryverzeichnis, d.h. kann vom Programm aus keine globalen Keys und auch keine value-Paare anlegen. Ich möchte aber für alle User in das globale Verzeichnis schreiben und nicht für jeden User in seinen eigenen Bereich... Ich weiß, was ich in meinem globalen Verzeichnis tue.

    Habe schon Registry Permissions aufprobiert, leider ohne Erfolg:

    Dim f As New RegistryPermission(RegistryPermissionAccess.AllAccess, "HKEY_LOCAL_MACHINE\SOFTWARE\xxx\yyy")
    f.SetPathList(RegistryPermissionAccess.AllAccess, "HKEY_LOCAL_MACHINE\SOFTWARE\xxx\yyy")
    f.Assert()

    Geht aber nicht. Ich möchte aber nicht manuell in der Registry die Rechte ändern, bzw. meine Kunden ändern lassen.

    Was tun?

    Berthold
    Mittwoch, 10. März 2010 18:21

Alle Antworten

  • Hallo,

    Du musst Deine Anwendung explizit als Administrator ausführen (Rechte Maustaste => Als Administrator ausführen), wenn Du in HKLM schreiben möchtest. Wenn Deine Anwendung permanent als Admin ausgeführt werden soll, kannst Du das über das Application Manifest festlegen. Würde ich jedoch nicht empfehlen.

    Du kannst dem Anwender auch anbieten Deine Anwendung erneut elevated zu starten. Hierzu kannst Du die Process Klasse nutzen. UseShellExecute muss True sein und als Verb gibst Du "RunAs" an. Wenn der Benutzer Mitglied in der lokalen Administratorengruppe ist, bekommt er den UAC Prompt, den er bestätigen muss. Andernfalls wird er aufgefordert die passenden Credentials einzugeben.
    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Mittwoch, 10. März 2010 18:47
    Beantworter
  • Hallo,

    gibt es vielleicht die Chance im Installer die HKLM Entries freizuschalten? Hab' bislang noch nichts entdeckt.

    Als Admin möchte ich die Applikation nicht permanent laufen lassen (wird in Friseursalons eingesetzt). Mit allem, was über einen Doppelklick zum Starten einer Applikation hinausgeht, sind meine User überfordert!

    Berthold Dettlaff
    Mittwoch, 10. März 2010 18:54
  • Hallo Berthold,

    über die Oberfläche des VS Installer ist da nichts integriert. Änderungen müsstest Du im Nachgang direkt am MSI durchführen. Dabei helfen Dir Tools, wie InstEd It! oder Orca (Teil des Windows SDK), die Lock Permission Tabelle des MSI zu bearbeiten und entsprechende Rechte zu setzen.

    Details: http://www.appdeploy.com/messageboards/tm.asp?m=19100&mpage=1&key=altiris&#19102

    InstEd It! eigenet sich gut, um ein Transform (MST) anzulegen, dass Du hinterher immer wieder auf das fertige MSI anwenden kannst. Auch automatisiert über eine PostBuildAction und MSITran.exe (ebenfalls Teil des Windows SDK).

    Alternative: Du schreibst die Daten in einer Datei basierten Einstellungsdatei in das Verzeichnis für gemeinsame Anwendungsdaten. Bei den Standardeinstellungen darf hier jeder User lesen, jedoch nur der Ersteller einer Datei/eines Ordners die Dateien verändern. Genauso kann der Ersteller die Berechtigungen so setzen, dass alle Benutzer schreiben dürfen, wenn das erforderlich ist.

    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Mittwoch, 10. März 2010 19:06
    Beantworter
  • Hallo Thomas,

    danke für den Tip. Ich habe in InstEd ein Transform erstellt und auf das msi angewendet:

    Table Object: LockPermissions

    LockObject: <meinKey>
    Table: Registry
    Domain: <null>
    User: Everyone
    Permission: 0x10000000      (GenericAll)

    Allerdings weigert sich Windows 7 Registry das entsprechende Verzeichnis mit dem definierten Zugriffsrecht auszustatten.

    Berthold Dettlaff
    Donnerstag, 11. März 2010 09:17
  • Hallo Berthold,

    wird Dein Setup mit erhöhten Rechten ausgeführt (setup.exe als Administrator ausführen bzw. Start über elevated Command Prompt [cmd])?

    Sonst bleiben nur die im Link genannten Alternativen setacl oder secedit, die als Custom Action ausgeführt werden.
    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Sonntag, 14. März 2010 11:09
    Beantworter
  • Hallo Thorsten,

    wenn ich unter Windows 7 (64 bit) das Setup in einem Build für x64 ausführe, dann werden die Rechte korrekt gesetzt. Unter x86 Windows mit einem AnyCPU Build nicht :-(. Ich gehe mal in medias res...

    Unter 64 bit habe ich dafür andere Probleme: auf accdb Access 12 Datenbanken kann ich nicht zugreifen... --> anderer Thread
    Montag, 15. März 2010 09:28