Mit windows-Umgebungsvariablen als registry-Werte in Visual Studio Installer
Hey, ich will windows-Umgebung Variablen, die als Wert für einen registry-Eintrag. Leider kann ich nicht einfach schreiben, sth wie %systemroot%\system32\MyScreensaver.scr
.
Als Sie sich vorstellen können, möchte ich Sie auf einige reg-Werte, um meine eigene app, wie die auto-start-und Bildschirmschoner und einige andere Dinge.
Irgendwelche Ideen?
- Andere Möglichkeiten, wie ein Programm auf auto-start und Einstellung einer bestimmten Bildschirmschoner mit VS-installer sind wellcome, too 🙂
- Ich habe meine Antwort, die nicht benötigt keine Codierung. Meine Antwort bedeutete mehr für jemanden, der nicht auf der Suche nach etwas code in eine app, aber um so mehr verwendet, die durch Netzwerk-Administratoren. 😉
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Windows-registry unterstützt das nativ mit der
REG_EXPAND_SZ
registry Wert geben.Verwenden Sie einfach
REG_EXPAND_SZ
stattREG_SZ
wenn Sie einbetten möchten Umgebungsvariablen in der Registrierung Schlüssel-Wert.Hier ein Beispiel für C# - code Zugriff auf eine
REG_EXPAND_SZ
und die Erweiterung wird automatisch behandelt:Hier ist ein Beispiel zum erstellen einer erweiterbaren, registry-Wert:
Anderen Plattformen oder scripting-Sprachen haben andere Mechanismen, um diese Unterstützung. Hier ist die low-level-Win32-Beschreibung von
REG_EXPAND_SZ
:Können Sie die Windows Installer -formatiert Art. Zum Beispiel, Sie Ihre registry-Wert kann sein:
Diesen Weg Windows-Installer wird automatisch beheben Sie die Umgebungsvariablen während der installation.
Ist es etwas schwierig, aber sehr einfach zu tun. Dieses Beispiel können Sie zum öffnen eines bestimmten Dateityps (*.test) mit einem Programm (Notepad++), die sich in einem benutzerspezifischen Verzeichnis. Ich habe diese für ein Szenario, auf meinem Windows 2008 server mit Remote Desktop (AKA Terminal-Server), damit jeder Benutzer ein Programm installiert, die PRO Benutzer-account, so dass andere Einstellungen verwendet werden könnten, pro user (ex: *.ini-Dateien, die sich innerhalb der apps-Verzeichnis). Hinweis: Nicht, dass es darauf ankommt, aber der Ordner "Programme" ausgeblendet, damit die user sehen es nicht.
Schritt 1. WENN Sie verbindliche profile werden Sie sicher, dass Sie zum ändern der NTUSER.MANN-Datei wieder in NTUSER.DAT.
Schritt 2. Loggen Sie sich in das Profil, das Sie Bearbeiten möchten, mithilfe von Remote-Desktop-Client.
Schritt 3. Öffnen Sie regedit und löschen Sie die folgenden Schlüssel, sofern Sie vorhanden sind.
Schritt 4. Erstellen Sie eine neue Textdatei und nennen Sie es "original".reg". Füllen Sie es mit den folgenden...
Schritt 5. Aktualisieren Registrierung (F5) und suchen für den neuen Schlüssel. Sollte die "command" Taste die mit "(Standard)" den Wert leer. In der "command" - Taste fügen Sie einen neuen "Wert der Erweiterbaren Zeichenfolge" namens "Neuer Wert #1". Setzen Sie den Wert auf die Anwendung Pfad "Y:\%username%\programs\Notepad++\notepad++.exe" "%1". Exportieren Sie dann die "command" - Taste auf dem desktop als "erweitert.reg".
Schritt 6. Bearbeiten Sie die "erweitert.reg" - Datei in notepad, und kopieren Sie alle Daten, die nach der "Neuer Wert #1". Ex: =hex(2):22...
Schritt 7. In der Nähe erweitert.reg-Datei, und öffnen Sie das "original".reg" - Datei dann ersetzen Sie den Standard-Befehl (...ist leer ( "" ) mit dem neuen hex-Wert haben wir in unserer Zwischenablage. Die Datei "original.reg" sollte wie folgt Aussehen jetzt...
Schritt 8. Jetzt haben wir unsere erweiterte variable bereit zu gehen, können Sie einfach eine Erweiterung hinzufügen, um eine Verbindung mit der Anwendung. Fügen Sie den folgenden, um die "original.reg" - Datei so Aussehen, wie die folgende...
Schritt 9. Öffnen Sie regedit und löschen Sie die folgenden Schlüssel, sofern Sie vorhanden sind. (Ja es wieder tun)... Jetzt die registry ist, wie wir nie etwas getan, und wir haben eine registry-Datei bereit zum einfügen in die registry!
Schritt 10. Wenn Sie möchten übernehmen Sie diese, um das aktuelle Profil dann starten Sie DIE REGISTRY-DATEI "original.reg" und fügen Sie es in die registry.
... Und das ist es! Jetzt alle *.test-Dateien öffnen mit "Y:\%username%\programs\Notepad++\notepad++.exe". Gehen Sie überprüfen Sie die registry und finden Sie den neuen Standard-Eintrag.
In der Befehlszeile, die Sie verwenden können, die Reg add Befehl (eingebaut in Windows), um registry-Werte, die Umgebungsvariablen enthalten.
Siehe hier: Wie zu verwenden REG_EXPAND_SZ von der Kommandozeile?
Diese eine expansion auf Rick Sladkey Antwort:
Hatte er geantwortet "REG_EXPAND_SZ" erlaubt die Verwendung von Umgebungsvariablen, das ist richtig, aber Sie sollten auch beachten, dass einige registry-Funktionen funktionieren nur mit der Standardmäßigen Eingabe-Taste. Zum Beispiel, sagen Sie einrichten möchten, einen Befehl für das Kontextmenü in der Windows-shell genannte Beispiel (zugänglich bei der rechten Maustaste auf den hintergrund eines Ordners):
dem Befehl, den Sie eingeben möchten, ist:
Dies funktioniert nur, wenn der default-Eintrag ist "REG_EXPAND_SZ" in der Erwägung, dass die Standard-Einträge erstellt von Regedit, wenn Sie erstellen einen Schlüssel REG_SZ. Wenn Sie Regedit ein, du wirst zu tun haben, einige Akrobatik zu konvertieren, die das Standard-Eintrag von REG_SZ auf REG_EXPAND_SZ als Regedit kann das nicht selbst. Hier ist die Arbeit erforderlich, um dies zu tun:
Gehen wir zurück zu meinem Beispiel, in die Befehl-Taste gedrückt, erstellen Sie eine REG_EXPAN_SZ Eintrag. Doppelklicken Sie darauf und geben Sie Ihren Befehl der Wahl. Zum Beispiel:
Den Eintrag, den Sie gerade erstellt haben, werden nicht den default-Eintrag und an dieser Stelle-shell nicht ausführen. Um dies zu beheben, der rechten Maustaste den Befehl Registrierungsschlüssel und exportieren Sie es als Befehl.reg. Die exportierte reg-Datei sollte wie folgt Aussehen:
Offensichtlich der hash verändert sich, wenn man mit einem anderen Befehl. Konvertieren REG_EXPAND_SZ-Eintrag in den default-Eintrag einfach löschen @="" Zeile und benennen Sie
zu
(Hinweis: es gibt keine Anführungszeichen um die @ hier).
Sobald Sie das getan haben Ihre mod, nur merge-Befehl.reg und der Standard-Eintrag ist nun im REG_EXPAND_SZ-format.
Verwendung einer erweiterbaren Zeichenfolge
DWORD = dword: Expandable String = hex(2): Multi-String = hex(7):
Ein DWORD ist ein 32-bit-Ganzzahl ohne Vorzeichen (Bereich: 0 bis 4294967295 dezimal) In der registry einen DWORD-beginnt immer mit 0x. In der registry DWORDS immer 8 Ziffern, die Folgen, 0x. Diese können in dezimal-oder hexadezimal-format 1000 kann geschrieben werden als: 0 x 00001000 oder 0x000003e8
DWORDS können nur die Ziffern 0-9. Streicher, jeglicher Art, immer verwenden Sie die ASCII -, im ACSII-1000 können nur geschrieben werden, als 31,30,30,30 Für den String-Datentyp, ASCII funktioniert im hintergrund, ohne dass Sie selbst wissen. Es muss, weil der computer verstehen nur 1s und 0s. Für Expandable String-und Multi-String-Datentypen, diese speichern Ihre Eingaben als eine Reihe von ASCII-codes in hexadezimal-format, getrennt durch ein Komma-und hex-Nullen. So, eine Erweiterbare Zeichenfolge von 1000 wäre: hex(2):31,00,30,00,30,00,30,00
Also lasst uns wandeln %PROGRAMFILES% in einer erweiterbaren Zeichenfolge. Erste, laden Sie diese: https://hotfile.com/dl/244097278/55aa086/ASCII_2_HEX_Conversion_Tool.7z.html
Nun offen, dass in jedem modernen browser. Legen Sie %PROGRAMFILES% in das ASCII-Feld, und wählen Sie verschlüsseln. Es wird Ihnen %25%50%52%4F%47%52%41%4D%46%49%4C%45%53%25 Kopieren einfügen in ein text-editor, verschieben Sie den ersten % zu Ende. Wählen Sie den Befehl ersetzen, finden alle "%" und ersetzen mit ",00,". Entfernen Sie das Komma am Ende. Sie sollten: 25,00,50,00,52,00,4 F,00,47,00,52,00,41,00,4 D,00,46,00,49,00,4 C,00,45,00,53,00,25,00 Und schließlich, hex(2):25,00,50,00,52,00,4 F,00,47,00,52,00,41,00,4 D,00,46,00,49,00,4 C,00,45,00,53,00,25,00
Getan.
Haben Sie jemals versucht, zu konvertieren, eine neugierige hex registry-Eintrag in ASCII-und scheiterte kläglich. Diese Lektion enthält alle Kenntnisse, die erforderlich ist, um reverse Engineering hex-codiert registry-Eintrag, der ist nicht verschlüsselt. Spaß Haben!