Installer, der in die Win-Registry schreibt

blz

Bekanntes Mitglied
Hallo zusammen,
ich hab mir ein kleines Java Progrämmchen zusammengebastelt.
Es geht dabei um mp3 Tagging.

Ich habe es in eine runnable jar verpackt und einige Registry-Einträge vorgenommen.
Wenn ich jetzt auf einen Ordner klicke, kann ich mein Programm über das Kontextmenü aufrufen und der Ordnerinhalt wird entsprechend getaggt. Soweit so gut.

Da es allerdings einige jars sind und auch einige registry einträge, würde ich gerne einen installer haben, damit ich nicht immer alles händisch eintragen muss. Dieser sollte folgendes können:

1. Anlegen der Ordnerstrukturen unter c/programme
2. runnable jars dahinkopieren
3. registry einträge anlegen

Gibt es dafür geeignete Software oder muss ich das alles selber schreiben, und wenn ja, wie?

edit: ich habe auch schon im Forum hier recherchiert und bin auf das Programm launch4j gestoßen - ist das das richtige für meine Zwecke?
 
Zuletzt bearbeitet:
Noch eine Nachfrage:
Komme nicht ganz mit den RegistryEinträgen zurecht.
Ich will unter HKCR\Directory\ContextMenus eine Schlüsselhierarchie mit commands und Zeichenfolgen erstellen. In der NSIS Doku gibt es aber so viele verschiedene Befehle ..
Was muss ich da nehmen?
 
Meinst du sowas (Beispiel):

WriteRegStr HKCR "$R0" "" "VLC$R0"
ReadRegStr $0 HKCR "VLC$R0" ""
WriteRegStr HKCR "VLC$R0" "" "VLC media file ($R0)"
WriteRegStr HKCR "VLC$R0\shell" "" "Play"
WriteRegStr HKCR "VLC$R0\shell\Play" "" $ShellAssociation_Play
WriteRegStr HKCR "VLC$R0\shell\Play\command" "" '"$INSTDIR\vlc.exe" --started-from-file "%1"'
WriteRegStr HKCR "VLC$R0\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'
 
uarg, kann ich dir noch nicht genau sagen, ich hänge grad noch an den basisc ...
ich will in der registry neue schlüssel und darunter wieder schlüssel etc. erstellen.
habe schon herausgefunden, dass das mit dem auch von dir verwendeten befehl WriteRegStr funktioniert bzw. diese Schlüssel automatisch erstellt werden, wenn man einen entsprechenden Pfad angibt.
Nun möchte ich in einem solchen Ordner eine Zeichenfolge mit einem gewissen Wert erstellen. Auch das klappt mit demselben Befehl:
WriteRegStr HKCR "Directory\ContextMenus\TagIt\Shell\... a test" "MUIVerb" "... a test"

Soweit bin ich. Jetzt möchte ich eine Hierarchieebene darunter den Schlüssel "command" erstellen und der Zeichenfolge, die mit (Standard) bezeichnet ist, einen neuen Wert zuweisen, z. B. "asdf.exe"

Aber das krieg ich noch nicht hin ...
 
aja, saucool, funktioniert!
Gibts jetzt wenn ich nur diese beiden Befehle benutz:

WriteRegStr HKCR "Directory\ContextMenus\TagIt\Shell\... a test" "MUIVerb" "... a test"
WriteRegStr HKCR "Directory\ContextMenus\TagIt\Shell\... a test\command" "" "test.exe"

irgendwas was ich abfangen/sicherheitstechnisch beachten/prüfen/... muss, um sicherzugehen, dass das immer läuft?
 
z.B. sicherstellen dass der Installer mit ausreichenden Rechten läuft ? Stichwort RequestExecutionLevel .
Oder meintest du jetzt speziell Registry-Belange ? Mir fällt da nichts ein.
 
ok, danke.
jetzt hab ich festgestellt, dass ich ja auch eine Funktion brauche, die mir dynamisch die aktuelle Java Version besorgt
dazu gibts im web auch massig beispiele, allerdings meistens von 2009 ... habe auch etwa herausgefunden, wo das problem liegt, finde aber keine lösung...
hier der code

Code:
Function LocateJVM
    ;Check for Java version and location
    Push $0
    Push $1

    ReadRegStr $JAVA_VER HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" CurrentVersion
    DetailPrint "Java-Ver: $JAVA_VER"
    StrCmp "" "$JAVA_VER" JavaNotPresent CheckJavaVer

    JavaNotPresent:
        StrCpy $JAVA_INSTALLATION_MSG "Java Runtime Environment is not installed on your computer. You need version 1.4 or newer to run this program."
        Goto Done

    CheckJavaVer:
        ReadRegStr $0 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment\$JAVA_VER" JavaHome
        GetFullPathName /SHORT $JAVA_HOME "$0"
        StrCpy $0 $JAVA_VER 1 0
        StrCpy $1 $JAVA_VER 1 2
        StrCpy $JAVA_VER "$0$1"
        IntCmp 14 $JAVA_VER FoundCorrectJavaVer FoundCorrectJavaVer JavaVerNotCorrect

    FoundCorrectJavaVer:
        IfFileExists "$JAVA_HOME\bin\javaw.exe" 0 JavaNotPresent
        ;MessageBox MB_OK "Found Java: $JAVA_VER at $JAVA_HOME"
        Goto Done

    JavaVerNotCorrect:
        StrCpy $JAVA_INSTALLATION_MSG "The version of Java Runtime Environment installed on your computer is $JAVA_VER. Version 1.4 or newer is required to run this program."

    Done:
        Pop $1
        Pop $0
FunctionEnd

das problem liegt wohl in der zeile
ReadRegStr $JAVA_VER HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" CurrentVersion

ich weiß nicht genau, ob das CurrentVersion die Bezeichnung eines Schlüssels sein soll, der vorhanden sein soll (aber warum dann nicht in ""), aber jedenfalls findet er die current version nicht.
in meiner registry stehen unter dem angegebenen Pfad nur die zwei Ordner 1.8 und 1.8.0_73
...

edit: habe jetzt gecheckt, dass das CurrentVersion die Zeichenfolge rechts inder Registry ist. Sie hat auch den Wert 1.8. Also eigentlich alles gut. Trotzdem bleibt der Wert von $JAVA_Ver leer ...

edit2: habs herausgefunden! Problem war, dass ich einen 32bit installer auf einem 64 bit system laufen lasse. -->

Code:
SetRegView 64
    ReadRegStr $JAVA_VER HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" CurrentVersion
SetRegView 32
 
Zuletzt bearbeitet:

Zurück
Oben