Neue Antwort
Dies ist das absolute Minimum, das Sie für eine korrekte Zuordnung benötigen. Ich habe dies herausgefunden, indem ich meinen eigenen Tipp Nummer 4 unten ausprobiert habe ( Sie können herausfinden, wie Windows dies für Sie erledigt ... ).
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.myext]
@="myext"
[HKEY_CLASSES_ROOT\myext]
@=".myext file"
[HKEY_CLASSES_ROOT\myext\shell]
[HKEY_CLASSES_ROOT\myext\shell\open]
[HKEY_CLASSES_ROOT\myext\shell\open\command]
@="\"C:\\...\\run.exe\" \"%1\""
Sie können DefaultIcon und andere Dinge nach Bedarf hinzufügen, aber ohne DefaultIcon verwendet Windows einfach das Symbol in run.exe(falls vorhanden). Sie können eines im Batch-to-Exe-Konverter hinzufügen, wenn Sie das erstellen run.exe.
Bedeutung %1und Anführungszeichen
Der Grund, warum Sie ein %1dort einfügen müssen, besteht darin, den Pfad und den Namen der zugehörigen Datei ( file.myext) an das Programm zu übergeben run.exe. Ohne dies weiterzugeben, ist Ihre Zuordnung sinnlos, da sie lediglich als Verknüpfung fungiert. Dies ist nicht erforderlich, da Sie einfach eine normale Verknüpfung erstellen können run.exe, um denselben Zweck zu erfüllen.
Ihre Batch - Datei sollte auch eine hat %1irgendwo im Innern , so dass der Pfad und der Name der zugehörigen Datei ( file.myext) wird verwendet , in der Batch - Datei (vermutlich es passieren zu Ihren mjar.jardenen etwas tun mit der Datei). Unabhängig davon, auf welche zugeordnete Datei Sie doppelklicken, erhalten Sie von Ihrem Java-Programm immer das gleiche Ergebnis. Dies ist wiederum sinnlos, da Sie einfach eine Verknüpfung zur Batch-Datei haben können, um denselben Zweck zu erfüllen.
Es ist auch wichtig, die %1Anführungszeichen einzuschließen , da Dateipfade Leerzeichen enthalten können und "diese Leerzeichen ohne die Anführungszeichen ( ) den Pfad in zwei oder mehr Argumente aufteilen können (wenn der gesamte Pfad als ein Argument betrachtet werden soll).
Beispiel Batch-Datei
Hier ist die Batch-Datei, in die ich zum exeTesten konvertiert habe . Es wird einfach angezeigt, was auch immer der Wert von %1ist.
@echo %1
@pause
Ihre Batch-Datei könnte wie mjar.jarfolgt aussehen (damit Sie den Pfad und den Namen der Datei erhalten, auf die Sie doppelklicken):
start /min "C:\...\javaw.exe -jar" "C:\...\mjar.jar" "%1"
Ich habe die exeDatei mit der .myextErweiterung verknüpft (mithilfe der Methode in Tipp 4) und dann die Registrierung überprüft, um die obige .regDatei zu erstellen . Wenn ich einen Doppelklick auf eine Datei mit .myextErweiterung, öffnet sich ein Befehlsfenster angezeigt wird ( echoBefehl) , um den Pfad und den Namen der Datei , die ich doppelt geklickt (dies ist , wie mein Test Batch - Datei wird mit der zugehörigen Datei).
Java-Programm
(Dies ist eine Zusammenfassung der vollständigen Chat-Diskussion , die Ihr Problem letztendlich gelöst hat.) Ihr in enthaltenes Java-Programm mjar.jarmuss darauf vorbereitet sein, das eingehende Argument zu akzeptieren und es zu verwenden. Ihr Programm soll die Datei, auf die sich das eingehende Argument bezieht, automatisch öffnen und deren Inhalt anzeigen. Daher sollte die mainMethode ungefähr so aussehen:
public static void main (String[] args) {
if (args.length >= 1) {
openFile(args[0]);
}
}
Die openFileMethode ist eine Methode, die die Datei unter dem übergebenen Namen öffnet. Die ifAnweisung stellt sicher, dass args[0]nur gelesen wird, wenn ein solches Argument vorliegt (Vermeidung ArrayIndexOutOfBoundsException). args[0]Im obigen Code wird nur das erste Argument verwendet. alle anderen Argumente ( args[1], args[2]usw.) werden ignoriert. Die openFileMethode wäre ungefähr so ( Deskriptoren und Rückgabetypen nicht enthalten ):
openFile(String filename) {
// code here to open the file referred by "filename" variable,
// read its contents and display it on the GUI
// or use it in the program as intended
}
Wenn in Ihrem Programm ein Open- Befehl in die GUI integriert ist, kann Ihre Anwendung, nachdem der Benutzer eine Datei mit diesem Befehl ausgewählt hat, dieselbe openFileMethode verwenden, um die ausgewählte Datei zu öffnen und ihren Inhalt anzuzeigen.
Vorherige Antwort
Ich habe noch keine endgültige Antwort auf Ihr Problem , aber hier sind einige Tipps, um Ihnen den Einstieg zu erleichtern:
Haben Sie versucht, Anführungszeichen hinzuzufügen? So: @="\"C:\\...\\run.exe\" \"%1\""
In der Registrierung wird der (Standard-) Wert folgendermaßen angezeigt:"C:\...\run.exe" "%1"
Lesen Sie das offizielle MSDN-Dokument von Microsoft zur Dateitypzuordnung . Sie müssen sich auch über programmatische Kennungen informieren (die im ersten Absatz dieses Dokuments verlinkt sind).
Versuchen Sie zuerst, Ihren .myextDateityp mit Notepad zu verknüpfen . Finden Sie heraus, wie Notepad mit .txtDateien verknüpft ist, und folgen Sie dem Beispiel. Bei korrekter Ausführung sollte Notepad Ihre file.myextDatei öffnen .
Sie können herausfinden, wie Windows dies für Sie erledigt. Rechtsklick file.myext, klicken Sie auf Öffnen mit> Wählen Sie Standardprogramm ... ^ und Durchsuchen Sie Ihre finden run.exeDatei. Verknüpfen und öffnen Sie die Windows-Registrierung und untersuchen Sie sie, um herauszufinden, wie Windows Ihre manuelle Zuordnung gespeichert hat. Sie können dann einfach den Dateityp und die programmatische Kennung in Registrierungsdateien exportieren.
^ Wenn file.myextkeine Zuordnung besteht, klicken Sie auf Öffnen> Wählen Sie ein Programm aus einer Liste der installierten Programme aus .
PS1: Offenbar Sie müssen doppelt Backslash in .reg - Dateien haben.
PS2: Es ist besser, Inhalte direkt in der Registrierung zu bearbeiten, die Effekte zu testen, dann die Schlüssel in REG-Dateien zu exportieren und sie zu einer einzigen Datei zu kombinieren, als selbst eine REG-Datei zu erstellen.
commandSchlüssel zu verwenden, um festzustellen, ob dies funktioniert?