Verwenden von Windows-Umgebungsvariablen als Registrierungswerte in Visual Studio Installer

8

Hey, ich möchte Windows-Umgebungsvariablen als Wert für einen Registrierungseintrag verwenden. Leider kann ich nicht einfach so etwas wie %systemroot%\system32\MyScreensaver.scr schreiben.

Wie Sie sich denken können, möchte ich einige reg Werte auf meine eigene App verweisen, wie den Autostart und den Bildschirmschoner und einige andere Dinge.

Irgendwelche Ideen?

    
Martin Booka Weser 23.05.2011, 19:21
quelle

6 Antworten

8

Die Windows-Registrierung unterstützt dies nativ mit dem Registrierungswert REG_EXPAND_SZ .

Verwenden Sie einfach REG_EXPAND_SZ anstelle von REG_SZ , wenn Sie Umgebungsvariablen in den Registrierungsschlüssel einbetten möchten.

Hier ist ein Beispiel für den C # -Code, der auf ein REG_EXPAND_SZ zugreift, und die Erweiterung wird automatisch behandelt:

%Vor%

Hier ist ein Beispiel für das Erstellen eines erweiterbaren Registrierungswerts:

%Vor%

Andere Plattformen oder Skriptsprachen haben andere Mechanismen, um dies zu unterstützen. Hier ist die Low-Level-Win32-Beschreibung von REG_EXPAND_SZ :

Rick Sladkey 23.05.2011, 20:39
quelle
5

Sie können den Windows Installer formatierten Typ . Ihr Registrierungswert kann beispielsweise sein:

%Vor%

Auf diese Weise wird Windows Installer die Umgebungsvariable während der Installation automatisch auflösen.

    
user527987 24.05.2011 06:19
quelle
1

Es ist ziemlich kompliziert, aber sehr einfach zu machen. In diesem Beispiel können Sie einen bestimmten Dateityp (* .test) mit einem Programm (Notepad ++) öffnen, das sich in einem benutzerspezifischen Verzeichnis befindet. Ich habe dies für ein Szenario auf meinem Windows 2008 Server verwendet, auf dem Remotedesktop (AKA Terminal Server) ausgeführt wird, damit jeder Benutzer ein installiertes PER - Benutzerkonto verwenden kann, so dass verschiedene Einstellungen pro Benutzer verwendet werden können (zB * .ini - Dateien im apps Verzeichnis). Hinweis: Nicht, dass es wichtig ist, aber der Ordner "Programme" ist ausgeblendet, so dass die Benutzer ihn nicht sehen.

%Vor%

Schritt 1. Wenn Sie verbindliche Profile verwenden, müssen Sie die Datei NTUSER.MAN wieder in NTUSER.DAT ändern.

Schritt 2. Melden Sie sich mit dem Remotedesktop-Client bei dem Profil an, das Sie bearbeiten möchten.

Schritt 3. Öffnen Sie regedit und löschen Sie die folgenden Schlüssel, falls sie vorhanden sind.

  

HKEY_CURRENT_USER \ Software \ Klassen \ Programme \ notepad ++. exe   HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ AktuelleVersion \ Explorer \ FileExts.test

Schritt 4. Erstellen Sie eine neue Textdatei und nennen Sie sie "original.reg". Fülle es mit folgendem ...

%Vor%

Schritt 5. Aktualisieren Sie die Registrierung (F5) und suchen Sie nach dem neuen Schlüssel. Sollte die "command" Taste mit "(Default)" Wert leer sein. Fügen Sie in der "Befehl" -Taste einen neuen "Erweiterbaren String-Wert" hinzu, der "Neuer Wert # 1" genannt wird. Setzen Sie den Wert auf den Pfad der Anwendung "Y: \% Benutzername% \ Programme \ Notepad ++ \ notepad ++. Exe" "% 1" . Dann exportieren Sie den "Befehl" Schlüssel auf den Desktop als "expanded.reg".

Schritt 6. Bearbeiten Sie die Datei "expanded.reg" im Editor und kopieren Sie alle Daten nach dem "Neuer Wert # 1" . Bsp .: = hex (2): 22 ...

%Vor%

Schritt 7. Schließen Sie die Datei expanded.reg und öffnen Sie die Datei "original.reg". Ersetzen Sie dann den Standardbefehl (der leer ist) durch den neuen Hex-Wert in der Zwischenablage. Die Datei "original.reg" sollte jetzt wie folgt aussehen ...

%Vor%

Schritt 8. Jetzt, da wir unsere erweiterte Variable bereit haben, können wir einfach eine Erweiterung hinzufügen, um sie mit der Anwendung zu verknüpfen. Fügen Sie der Datei "original.reg" Folgendes hinzu, damit es wie folgt aussieht ...

%Vor%

Schritt 9. Öffnen Sie regedit und löschen Sie die folgenden Schlüssel, falls sie existieren. (Ja, mach es noch einmal) ... Jetzt ist die Registrierung so, als ob wir nie etwas getan hätten und wir haben eine Registrierungsdatei, die bereit ist, sie in die Registrierung einzufügen!

  

HKEY_CURRENT_USER \ Software \ Klassen \ Programme \ notepad ++. exe   HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ AktuelleVersion \ Explorer \ FileExts.test

Schritt 10. Wenn Sie dies auf das aktuelle Profil anwenden möchten, dann führen Sie die Registrierungsdatei "original.reg" aus und fügen Sie sie in die Registrierung ein.

Und das ist es! Jetzt werden alle * .test Dateien mit "Y: \% Benutzername% \ Programme \ Notepad ++ \ notepad ++. Exe" geöffnet. Überprüfen Sie die Registrierung und sehen Sie sich den neuen Standardeintrag an.

    
Arvo Bowen 16.08.2013 02:27
quelle
1

In der Befehlszeile können Sie den Befehl zum Hinzufügen von Registern (in Windows integriert) verwenden. um Registrierungswerte festzulegen, die Umgebungsvariablen enthalten.

Siehe hier: Wie benutzt man REG_EXPAND_SZ von der Kommandozeile aus?

    
rogersillito 18.02.2014 18:40
quelle
1

Dies ist eine Erweiterung von Rick Sladkeys Antwort:

Er hat geantwortet REG_EXPAND_SZ ermöglicht Ihnen die Verwendung von Umgebungsvariablen, die korrekt sind, aber Sie sollten auch beachten, dass einige Registrierungsfunktionalitäten nur mit der Standardeingabe eines Schlüssels funktionieren. Angenommen, Sie möchten einen Befehl für das Kontextmenü in der Windows-Shell namens "Beispiel" einrichten (zugänglich, wenn Sie mit der rechten Maustaste auf den Hintergrund eines Ordners klicken):

%Vor%

und der Befehl, den Sie eingeben möchten, ist:

%Vor%

Dies funktioniert nur, wenn der Standardeintrag REG_EXPAND_SZ ist, während die Standardeinträge, die von Regedit beim Erstellen eines Schlüssels erstellt werden, REG_SZ sind. Wenn Sie Regedit verwenden, müssen Sie einige Akrobatik machen, um den Standardeintrag von REG_SZ in REG_EXPAND_SZ zu konvertieren, da Regedit das selbst nicht kann. Hier ist die Arbeit um dies zu tun:

Gehen Sie zurück zu meinem Beispiel und erstellen Sie innerhalb des Befehlsschlüssels einen REG_EXPAN_SZ-Eintrag. Doppelklicken Sie darauf und geben Sie Ihren Befehl der Wahl ein. Zum Beispiel:

%Vor%

Der Eintrag, den Sie gerade erstellt haben, ist nicht der Standardeintrag und kann an dieser Stelle nicht ausgeführt werden. Um dies zu beheben, klicken Sie mit der rechten Maustaste auf den Befehlsregistrierungsschlüssel und exportieren Sie ihn als command.reg. Ihre exportierte reg-Datei sollte so aussehen:

%Vor%

Offensichtlich variiert der Hash, wenn Sie einen anderen Befehl verwenden. Um den Eintrag REG_EXPAND_SZ in den Standardeintrag zu konvertieren, löschen Sie einfach die Zeile @="" und benennen Sie

um %Vor%

bis

%Vor%

(Beachten Sie, dass hier keine Anführungszeichen um das @ stehen).

Sobald du deinen Mod fertiggestellt hast, führe einfach command.reg zusammen und der Standardeintrag wird jetzt im REG_EXPAND_SZ Format sein.

    
thebunnyrules 27.03.2016 06:54
quelle
0

Verwenden Sie eine erweiterbare Zeichenfolge

DWORD = dword: Erweiterbar String = hex (2): Multi String = hex (7):

Ein DWORD ist eine 32-Bit-Ganzzahl ohne Vorzeichen (Bereich: 0 bis 4294967295 dezimal). In der Registrierung beginnt ein DWORD immer mit 0x. In der Registrierung haben DWORDS immer 8 Ziffern, die 0x folgen. Dies kann im dezimalen oder hexadezimalen Format sein, 1000 kann geschrieben werden als: 0x00001000 oder 0x000003e8

DWORDS kann nur die Ziffern 0-9 verwenden. Strings jeder Art verwenden immer ASCII, in ACSII 1000 kann nur geschrieben werden als 31,30,30,30 Für den Datentyp String arbeitet ASCII im Hintergrund, ohne dass man es überhaupt merkt. Es muss, weil der Computer nur 1s und 0s versteht. Bei den Datentypen Erweiterbarer String und Multi String speichern diese Ihre Einträge als eine Reihe von ASCII-Codes im Hexadezimalformat, getrennt durch Kommas und Hexadezimal-Nullen. Eine erweiterbare Zeichenfolge von 1000 wäre also: hex (2): 31,00,30,00,30,00,30,00

Lassen Sie uns also% PROGRAMFILES% in eine erweiterbare Zeichenkette konvertieren. Laden Sie zunächst Folgendes herunter: Ссылка

Öffnen Sie das jetzt in jedem modernen Browser. Setzen Sie% PROGRAMFILES% in das ASCII-Feld und wählen Sie es encodieren. Es gibt Ihnen% 25% 50% 52% 4F% 47% 52% 41% 4D% 46% 49% 4C% 45% 53% 25 Kopieren Sie das in einen Texteditor und verschieben Sie den ersten% bis zum Ende. Wählen Sie den Befehl Ersetzen, finden Sie alle "%" und ersetzen Sie durch ", 00,". Entferne das Komma ganz am Ende. Sie sollten erhalten: 25,00,50,00,52,00,4F, 00,47,00,52,00,41,00,4D, 00,46,00,49,00,4C, 00,45, 00,53,00,25,00 Und schließlich, Hex (2): 25,00,50,00,52,00,4F, 00,47,00,52,00,41,00,4D, 00,46 , 00,49,00,4C, 00,45,00,53,00,25,00

Fertig.

Haben Sie jemals versucht, einen seltsamen Hex-Registry-Eintrag in ASCII zu konvertieren und kläglich gescheitert? Diese Lektion enthält das gesamte Wissen, das erforderlich ist, um jeden hexadezimierten Registrierungseintrag, der nicht verschlüsselt ist, zurückzuentwickeln. Viel Spaß!

    
DarkReverser 08.09.2013 21:25
quelle