Создать ассоциацию обработчика схемы URI

3069
user182944

Я новичок в создании пользовательских схем URI и пытаюсь запустить исполняемый файл JAR с использованием схем URI в моей системе Windows 7.

Для запуска этого файла JAR из командной строки, я использую эту команду:

java -jar demo.jar

РЕДАКТИРОВАТЬ:

Для запуска того же самого с использованием пользовательской схемы URI я создал .regфайл со следующей записью ( скопировано из поста ниже ):

Windows Registry Editor Version 5.00  [HKEY_CLASSES_ROOT\DemoStart] "URL Protocol"=""  [HKEY_CLASSES_ROOT\DemoStart\shell]  [HKEY_CLASSES_ROOT\DemoStart\shell\open]  [HKEY_CLASSES_ROOT\DemoStart\shell\open\command] @="\"java.exe\" -jar \"C:\\Users\\John\\Desktop\\demo.jar\"" 

Это не работает по следующей причине:

Исполняемый исполняемый файл jar, который я пытаюсь использовать по имени, demo.jarявляется файлом jar, предоставленным третьей стороной, и у него довольно много зависимостей от XML-файлов конфигурации, которые также находятся в той же папке, содержащей файл jar. У меня нет прав изменять код, присутствующий в файле jar.

Используя командную строку, команда "java.exe" -jar "demo.jar"работает только тогда, когда я перехожу к папке, содержащей как, demo.jarтак и dependent config xml files. НО, если я пытаюсь запустить команду: "java.exe" -jar "C:\Users\John\Desktop\demo.jar"из местоположения по умолчанию окна командной строки (которое в моем случае C:\Users\John), то команда не работает, так как зависимые XML-файлы конфигурации недоступны.

Следовательно, мне нужно найти способ изменить расположение командной строки по умолчанию, прежде чем выполнять файл JAR.

Подскажите, возможно ли установить местоположение по умолчанию для командной строки, C:\Users\John\Desktopкогда я запускаю пользовательский URI (в этом случае нет необходимости переходить в другое место, и команда должна работать нормально).

2
Я создал файл `.txt`, изменил расширение файла на` .reg`, поместил код, который вы разместили ниже, а затем дважды щелкнул файл `.reg`, чтобы создать запись в реестре. Затем я подтвердил то же самое в `regedit`. user182944 10 лет назад 0

2 ответа на вопрос

2
lzam

Your .reg file doesn't look right. The format is very odd. It should look something more like this:

Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\DemoStart] "URL Protocol"="" [HKEY_CLASSES_ROOT\DemoStart\shell] [HKEY_CLASSES_ROOT\DemoStart\shell\open] [HKEY_CLASSES_ROOT\DemoStart\shell\open\command] @="\"java.exe\" -jar \"C:\\Users\\John\\Desktop\\demo.jar\"" 

If this still doesn't work, double check that java is in your PATH. If it is, and it still doesn't work, try replacing "java" with the full path to the Java exe.

Это также не может работать, потому что URL никогда не передается программе. `"% 1 "` должно появиться в соответствующем месте. Кроме того, всегда используйте абсолютные пути, иначе вы просто напрашиваетесь на неприятности. / edit: О да, и может быть целесообразно указать имя (`@` рядом с `URL Protocol`). Daniel B 10 лет назад 1
Это не то, что я имел ввиду. Я имел в виду «дружеское имя». Это запись по умолчанию * рядом с * `URL Protocol`. Вы можете увидеть это в большинстве записей в `HKCR`. Я выложу свой ответ позже. Daniel B 10 лет назад 0
@Izam +1 за помощь до сих пор. Когда я открываю `командную строку`, расположение по умолчанию` C: \ Users \ John`. Если я вручную перехожу к папке `C: \ Users \ John \ Desktop` в командной строке и запускаю команду` "java.exe" -jar "demo.jar" `, то все работает нормально. Но если я не перехожу на `Desktop` и запускаю эту команду` "java.exe" -jar "C: \ Users \ John \ Desktop \ demo.jar" `из местоположения по умолчанию (то есть` C: \ Users) \ John`), тогда он не работает, так как в Desktop у меня есть и другие XML-файлы, необходимые для запуска jar-файла. user182944 10 лет назад 0
Хорошо, я сделал некоторые изменения, связанные с приложением, и, наконец, все заработало, поэтому я принял этот ответ. user182944 10 лет назад 0
1
Daniel B

Итак, из того, что я понял, ваша главная проблема не в фактической ассоциации файлов, а в рабочем каталоге. К сожалению, на рабочий каталог нельзя повлиять при запуске из файловой ассоциации. Если программа зависит от файлов, кроме ее исполняемого файла, она будет нарушена, если она будет полагаться на рабочий каталог.

К счастью, программирование больше не только для экспертов. ;)

Следующий однострочный скрипт AutoHotkey (который может быть скомпилирован в отдельный .exeфайл) запускает программу (или .jarфайл или что-то еще). В рабочем каталоге будет указано .exeместоположение скрипта .

Run, hello.jar, %A_ScriptDir% 

На самом деле я не проверял это с .jarфайлом, потому что у меня сейчас не установлен JDK. Я попробовал с некомпилированным скриптом AutoHotkey. Документация по Runкоманде доступна здесь .

Я выполнил следующие шаги: создал файл `.ahk`, добавил запись` #z :: Run, demp.jar,% A_ScriptDir% `в файл,` Run Script` и затем нажал `Windows Key + z`, чтобы запустить `demo.jar`, все это отлично сработало для меня. Но я не хочу просить моих пользователей нажимать «AutoHot Key» вручную, следовательно, желая автоматизировать этот процесс, например: при запуске браузера автоматически запускается «demo.jar». Пожалуйста, предложите что-нибудь об этом. user182944 10 лет назад 0
Вам нужно будет связать скрипт AHK (или `.exe`) с протоколом вместо` java.exe`. Daniel B 10 лет назад 0