24

У меня есть программа, которая открывается с определенным ярлыком, но ярлык, кажется, отправляет параметры в приложение. Если я иду прямо в целевой каталог и дважды щелкаю, это не работает. Однако, если я использую командную строку и передам определенный аргумент, приложение откроется правильно.

Я хочу открыть определенные типы файлов с помощью приложения, но приложение должно иметь параметры, иначе оно не будет работать. Можно ли сделать что-то подобное?

7 ответов7

18

Я столкнулся с той же проблемой, что и @jtpereyda, и решение от @bobbymcr у меня тоже не сработало. Я пытался получить все параметры командной строки, передаваемые в сценарии node.js, без необходимости использовать файл node.exe в команде.

Проблема заключается в том, что если вы уже связали программу с расширением через диалоговое окно « Open With », то между ними будет создана ассоциация приложения, а не ассоциация расширения файла. И ассоциации приложений имеют приоритет.

Если вы не возражаете против редактирования реестра, вы можете изменить ключ (Default) по следующему пути:

HKEY_CLASSES_ROOT\Applications\node.exe\shell\open\command

Вам следует заменить node.exe приложением, которое вы настраиваете.

Или вы можете просто полностью удалить папку приложения из папки HKEY_CLASSES_ROOT\Applications и ваша ассоциация ftype начнет работать.

Обязательно используйте %* который будет передавать оставшиеся неопределенные аргументы командной строки или вообще ничего. Если вы выполните "%2" "%3" "%4" "%5" вы получите 5 пустых строковых параметров, переданных в ваше приложение, если вы не укажете аргументы командной строки.

Наконец, если вы не согласны с изменением реестра вручную, вы можете использовать бесплатный инструмент от Nirsoft - FileTypesManager - http://www.nirsoft.net/utils/file_types_manager.html

Файловые ассоциации появятся вверху списка, без текста в первом столбце расширения. Просто найдите имя исполняемого файла в списке и выберите его, чтобы изменить поле command line для имени open действия.

На windows7 изменения отразились сразу же без перезагрузки или перезапуска приложения. Однако утилита Nirsoft имеет функцию "Обновить рабочий стол" при любой модификации, поэтому я полагаю, что, возможно, Vista или более ранние версии ОС будут кэшировать данные. В этом случае утилита будет лучшей ставкой, в противном случае вам может потребоваться выйти и войти, чтобы увидеть изменения.

10

Вы можете сделать это с помощью assoc и ftype в командной строке. Откройте командную строку с повышенными правами и попробуйте следующее:

ftype MyFileType=C:\MyDir\MyProgram.exe /arg1 /arg2 "%1"
assoc .xyz=MyFileType

Это свяжет .xyz с MyProgram.exe и передаст командную строку /arg1 /arg2 [filename.xyz] программе для его запуска.

1

У меня была похожая проблема со старой версией PSP с Windows7

Это решение (смена оболочки \open \ командной строки в реестре) сработало, НО должен был иметь синтаксис "C:\ MyFolderName \ PSP.EXE"% 1 NO QUOTES AROUND% 1, иначе это интерпретируется как константа

1

Человек, который задает вопрос, сообщает, что лучший ответ на самом деле не работает.

Я понял это для XP, которая может применяться к более поздним ОС.

В командной строке cmd вам нужны две команды: assoc , ftype .

Эти два могут показать, что связано, и затем отредактировать ассоциацию, но есть поворот, инструкции MS кажутся неправильными / неполными. Я был предупрежден об этом, заметив недокументированный стиль ассоциации известных ветеранских приложений, почему?

Этот пример позволяет передавать много аргументов ассоциированной программе.

ftype name_of_assoc="C\blah\aprog.exe" "%1" "%*"

Не опечатка, которая является "%1" "%*" . Звезда процента не будет работать без предшествующего процента 1 .

И это сразу же начинает действовать, не требуется выходить из системы и т.д.

Сделано правильно, пройдет 3 к arg []

myfile.wotsit file1 file2 file3

Не сделали этого, но похоже, что следующие внешние кавычки передают -m, если программе нужен флаг.

ftype name_of_assoc="C\blah\aprog.exe" -m "%1" "%*"
1

Не лучшее решение, но самое простое - использовать командный файл.

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

{имя приложения} .bat

    start "" "{app path}" %1 /edit

Пример:

BCompareEdit.bat

    start "" "C:\Program Files\Beyond Compare 4\BCompare.exe" %1 /edit
0

Вот расширение, которое, кажется, делает именно то, что вы хотите. Я никогда не использовал его раньше, но, похоже, получил хорошие отзывы. оставить комментарий, если есть проблемы.

-1

Сделайте ярлык Windows и используйте следующий шаблон:

"C:\Windows\system32\mspaint.exe" "c:\data\basejpg.jpg" %1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .