Jump to content











Photo
- - - - -

Für Kontextmenü-Eintrag korrekt in Registry schreiben


  • Please log in to reply
11 replies to this topic

#1 Mikka

Mikka

    Frequent Member

  • Developer
  • 175 posts
  •  
    Germany

Posted 29 May 2012 - 09:57 PM

'n Abend zusammen,

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):

Posted Image

Posted Image
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? :huh:

Vorab schon mal danke!

#2 Mikka

Mikka

    Frequent Member

  • Developer
  • 175 posts
  •  
    Germany

Posted 02 June 2012 - 02:04 PM

Ich verstehe es nicht! #$pProgramFiles#$p%ProgramFolder%… wird in beiden Fällen (ganz korrekt) zu %ProgramFiles%Notepad++… umgeformt und verweist je nachdem auf X:Program FilesNotepad++… bzw. Y:PROGRAMSNOTEPAD++… Ein echo %ProgramFiles% via cmd bestätigt mir zum Beispiel auch X:Program Files, q. e. e.
:ermm:

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 pscEx

pscEx

    Platinum Member

  • Team Reboot
  • 12688 posts
  • Location:Korschenbroich, Germany
  • Interests:What somebody else cannot do.
  •  
    European Union

Posted 02 June 2012 - 02:39 PM

Versuch mal im RegWrite für Path, #$pProgramFiles#$p durch %PE_Programs% zu ersetzen. (Dann auch 0x2 durch 0x1 ersetzen!)
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 MedEvil

MedEvil

    Platinum Member

  • .script developer
  • 7771 posts

Posted 02 June 2012 - 02:51 PM

Und Du bist Dir sicher, daß in Path nicht nur den Pfad sondern den Pfad samt exe gehört?
Oder muß da vielleicht noch ein Parameter mit übergeben werden? (%1)

Ansonsten sehe ich auch nicht, was das Problem sein könnte.

:cheers:

#5 Mikka

Mikka

    Frequent Member

  • Developer
  • 175 posts
  •  
    Germany

Posted 02 June 2012 - 04:49 PM

Peter, mit 0x1 und %PE_Programs%Program Files statt %ProgramFiles% erhalte ich als Path-Wert %SystemDrive%Program Files… :D, also auch nicht besser...

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 MedEvil

MedEvil

    Platinum Member

  • .script developer
  • 7771 posts

Posted 02 June 2012 - 05:08 PM

Du nutzt für das Kontextmenü eine dll, welche dann an Notepad weiterrecht. Damit hatten wir schon des öfteren Probleme. So dämlich wie die manchmal programmiert sind, das glaubt man nicht.

Mach doch den Kontextmenüeintrag, ohne die dll zu nutzen.

:cheers:

#7 pscEx

pscEx

    Platinum Member

  • Team Reboot
  • 12688 posts
  • Location:Korschenbroich, Germany
  • Interests:What somebody else cannot do.
  •  
    European Union

Posted 02 June 2012 - 05:13 PM

Versuche mal, das in Deinem Build hinzuzufügen:

RegHiveLoad,WB-Software,%RegSoftware%

RegWrite,HKLM,0x1,WB-SoftwareClasses*OpenWithListNotepad++.exe

RegHiveUnLoad,WB-Software


Peter

#8 Mikka

Mikka

    Frequent Member

  • Developer
  • 175 posts
  •  
    Germany

Posted 02 June 2012 - 09:02 PM

@MedEvil & Peter: Ja, wäre meine nächste Idee gewesen.

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.) :huh:

Edited by Mikka, 02 June 2012 - 09:05 PM.


#9 MedEvil

MedEvil

    Platinum Member

  • .script developer
  • 7771 posts

Posted 02 June 2012 - 09:20 PM

Und anstatt %ProgramFiles% zu nehmen, hast du schon %SystemDrive%\Programme ausprobiert?
%SystemDrive% wird weit früher deklariert als %ProgramFiles%. Manchmal kommt %ProgramFiles% einfach zu spät.

:cheers:

#10 Mikka

Mikka

    Frequent Member

  • Developer
  • 175 posts
  •  
    Germany

Posted 03 June 2012 - 01:19 PM

%SystemDrive% verhält sich wie %ProgramFiles% oder %PE_Programs%...
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. :glare:

Edited by Mikka, 03 June 2012 - 01:54 PM.


#11 pscEx

pscEx

    Platinum Member

  • Team Reboot
  • 12688 posts
  • Location:Korschenbroich, Germany
  • Interests:What somebody else cannot do.
  •  
    European Union

Posted 03 June 2012 - 07:52 PM

Es werden mit Sicherheit wieder einige über "Spam-Advertising" reden, aber mache doch mal Deine Kontext-Änderungen in multiPE's Notepad++ script.

Peter

#12 Mikka

Mikka

    Frequent Member

  • Developer
  • 175 posts
  •  
    Germany

Posted 04 June 2012 - 08:29 PM

Heureka, es ist vollbr8! :beer:

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...




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users