Für Kontextmenü-Eintrag korrekt in Registry schreiben
#1
Posted 29 May 2012 - 09:57 PM
ich feile an einem Notepad++-Skript (so eine Art "Best Of" verschiedener Versionen) für Win7PE SE (x86).
Auf Wunsch ermögliche ich dem Nutzer den Kontextmenü-Eintrag (urspr.: Edit with Notepad++) zu integrieren.
Welche Registrywerte dafür geschrieben werden müssen, weiß ich.
Mein Problem ist der WinBuilder-Teil der Pfadangaben (bzw. korrekte Variablen):
Registry-Wert Path verweist nicht auf "X:\Program Files\Notepad++\notepad++.exe"
Im relevanten Block steht bei mir momentan:
RegWrite,HKLM,0x2,"Tmp_Software\Classes\CLSID\{00F3C2EC-A6EE-11DE-A03A-EF8F55D89593}\InprocServer32",,"#$pProgramFiles#$p\%ProgramFolder%\NppShell_04.dll"
[…]
RegWrite,HKLM,0x2,"Tmp_Software\Classes\CLSID\{00F3C2EC-A6EE-11DE-A03A-EF8F55D89593}\Settings","Path","#$pProgramFiles#$p\%ProgramFolder%\%ProgramEXE%"
Die obere Zeile scheint soweit zu klappen, vgl. 1. Screenshot (Eintrag samt Icon sind vorhanden bzw. klickbar).
Ein Klick auf Öffnen mit Notepad++ führt zur Meldung im 2. Screenshot:
Also ist in der unteren RegWrite-Zeile ein Fehler; ich habe darum auch %PE_Programs%\%ProgramFolder%... ausprobiert, ohne Erfolg. Lustig, dass die verknüpften Dateitypen sich per Doppelklick ohne Schwierigkeiten öffnen lassen, es betrifft wirklich nur das Rechtsklick-Öffnen.
Was mache ich falsch?
Vorab schon mal danke!
#2
Posted 02 June 2012 - 02:04 PM
Nur dass %ProgramFiles% im Schlüssel InprocServer32 für den (leeren) Standard-Wert (vgl. oben Screenshot 1) akzeptiert wird, aber nicht für Path – Regwert-Typ und -Inhalt ist (bis auf die Zieldatei) gleich!
Wie stelle ich am einfachsten sicher, dass in Path %ProgramFiles% "zugewiesen" drinsteht, also X:Program Files… bzw. Y:PROGRAMS…?
Bin Anfänger und für jeden Tipp dankbar!
Edited by Mikka, 02 June 2012 - 02:23 PM.
#3
Posted 02 June 2012 - 02:39 PM
Damit wird der Wert hardcoded in die Registry geschrieben.
Ich bin mir allerdings nicht sicher, ob das funktioniert, wenn die Sprache der source CD anders ist als die Sprache des PCs.
Und in einem anderen Projekt, wo %PE_Programs% nicht bekannt ist, wird es Probleme geben.
Peter
EDIT: Sorry, ich habe gerade erst bemerkt, dass Du %PE_Programs% auch schon probiert hast ...
#4
Posted 02 June 2012 - 02:51 PM
Oder muß da vielleicht noch ein Parameter mit übergeben werden? (%1)
Ansonsten sehe ich auch nicht, was das Problem sein könnte.
#5
Posted 02 June 2012 - 04:49 PM
MedEvil, es klappt, wenn in Path x:Program FilesNotepad++notepad++.exe drinsteht. (Bzw. Y:PROGRAMS… usw.)
"Hardcoded" funktioniert es ("x:Program#$sFiles%ProgramFolder%%ProgramEXE%").
Ist wohl ein Notepad++-Problem...
#6
Posted 02 June 2012 - 05:08 PM
Mach doch den Kontextmenüeintrag, ohne die dll zu nutzen.
#7
Posted 02 June 2012 - 05:13 PM
RegHiveLoad,WB-Software,%RegSoftware% RegWrite,HKLM,0x1,WB-SoftwareClasses*OpenWithListNotepad++.exe RegHiveUnLoad,WB-Software
Peter
#8
Posted 02 June 2012 - 09:02 PM
Folgender kleiner Würgaround funktioniert auch:
##Path-Variable abhängig korrekt definieren If,%CheckBoxRAM%,Equal,True,Begin RegWrite,HKLM,0x1,"Tmp_SoftwareClassesCLSID{00F3C2EC-A6EE-11DE-A03A-EF8F55D89593}Settings","Path","x:Program#$sFiles%ProgramFolder%%ProgramEXE%" End Else,Begin RegWrite,HKLM,0x1,"Tmp_SoftwareClassesCLSID{00F3C2EC-A6EE-11DE-A03A-EF8F55D89593}Settings","Path","y:PROGRAMS%ProgramFolder%%ProgramEXE%" End
Eleganter wäre natürlich ein Ansatz wie "Setze den aktuellen Wert von %ProgramFiles% (bzw. %PE_Programs%%ProgramFolder% o.a.) ein, schreibe aber nicht die %-Variable direkt hin", so dass man sich die If-Else-Fallunterscheidung schenken kann.
So eine Art {%ProgramFolder%}, weiß nur nicht ob das syntaktisch machbar ist. (%ProgramFolder% und %ProgramEXE% funktionieren wie erwartet.)
Edited by Mikka, 02 June 2012 - 09:05 PM.
#9
Posted 02 June 2012 - 09:20 PM
%SystemDrive% wird weit früher deklariert als %ProgramFiles%. Manchmal kommt %ProgramFiles% einfach zu spät.
#10
Posted 03 June 2012 - 01:19 PM
Keine Ahnung, ob man Registrywerte zeitabhängig (d.h. später) schreiben kann bzw. ob man so das erwünschte Ergebnis erhält...
(Eine Frage, die mich grundsätzlich interessieren würde.)
Demnach brauche ich jene If-Else-Weiche wohl oder übel.
Edited by Mikka, 03 June 2012 - 01:54 PM.
#12
Posted 04 June 2012 - 08:29 PM
Peter, eine 3. Version die dein Konzept aufgreift, ist schon angedacht.
Du kannst ja mal testen, ob mein Gefrickel mit deiner Fassung irgendwie konform zu bringen ist...
0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users