Page 4 of 5

Ассоциации для файлов при запуске из командной строки

Posted: Thu 21 Sep, 2017 14:14
by John Doe

Latest post of the previous page:

Вообще-то я о принципе. На примере *.py, но в фаре у каждого свои ассоциации.
Плюс, системными ассоциациями проблематично например сделать запуск фаровских плагинов, по префиксу.

Ассоциации для файлов при запуске из командной строки

Posted: Thu 21 Sep, 2017 15:42
by gene.pavlovsky
HaRT, это уже обсуждалось в начале темы, но было высказано мнение, что иногда хочется иметь portable версию Фара, которую можно использовать на чужой системе без необходимости менять системные ассоциации файлов.

Ассоциации для файлов при запуске из командной строки

Posted: Thu 21 Sep, 2017 21:50
by DrKnS
John Doe wrote: Wed 20 Sep, 2017 14:51Жмём Enter на файле, получаем макрообласть "Shell".
Запускаем то же самое из командной строки - получаем "Other".
Other - это десктоп, на фоне которого отображается сообщение.
John Doe wrote: Wed 20 Sep, 2017 14:51по макрообласти Other я пытаюсь определить, установлен ли в данный момент режим UserScreen, соответственно надо ли вызвать Get/SetUserScreen
Почему бы не вызывать всегда?
John Doe wrote: Thu 21 Sep, 2017 08:28Нашёл настройку, которая влияет
Раньше не влияла, потом я зачем-то добавил, причину не помню. Возможно, как-то связано с альтернативными комспеками и идущими с ними файлами без расширения.
5036. Если у вас что-то поломалось - кричите.

Ассоциации для файлов при запуске из командной строки

Posted: Fri 22 Sep, 2017 07:37
by John Doe
DrKnS wrote: Thu 21 Sep, 2017 21:50Other - это десктоп, на фоне которого отображается сообщение.
Бесспорно, тут всё логично.
Выходит что в этой ситуации я никак не могу выяснить, активен ли в данный момент UserScreen или нет (т.е. вызывался ли перед этим GetUserScreen).
В некоторых случаях достаточно использовать какой-то свой флаг, но этого точно недостаточно, если UserScreen использовать как универсальный способ отображения десктопа в любой момент (например в редакторе)
Как вариант, для определения текущего режима можно было бы задействовать неиспользуемый сейчас в FCTL_GETUSERSCREEN Param2.
DrKnS wrote: Thu 21 Sep, 2017 21:50Почему бы не вызывать всегда?
Потому что запускаемый скрипт может использовать диалоговые функции, а значит после FCTL_SETUSERSCREEN в буфере останется мусор.

А вообще для моих целей крайне желательно при запуске вообще не переключаться в Desktop, а оставлять панели.
(При запуске обычных команд этого мы добиваемся добавляя в начало символ @)
Добавлено
Мне кажется то что сейчас при запуске префикса гасятся панели, и в фоне отображается Desktop это вообще напрасное действие, потому что "нарисовать" что-то на этом десктопе всё равно не получится, не вызвав предварительно GetUserScreen.
http://bugs.farmanager.com/view.php?id=3501

Ассоциации для файлов при запуске из командной строки

Posted: Fri 22 Sep, 2017 07:48
by John Doe
DrKnS wrote: Thu 21 Sep, 2017 21:50
John Doe wrote: Thu 21 Sep, 2017 08:28Нашёл настройку, которая влияет
Раньше не влияла, потом я зачем-то добавил, причину не помню. Возможно, как-то связано с альтернативными комспеками и идущими с ними файлами без расширения.
5036. Если у вас что-то поломалось - кричите.
Возможно это было как раз для описанного выше случая:
gene.pavlovsky wrote: Thu 21 Sep, 2017 09:42Пишу, допустим, "python script.py", запускаю, Фар пытается выполнить команду напрямую, без ComSpec-а, при этом он находит Cygwin-ский symlink: python => python2.7.exe, но не знает, что с ним делать, вылезает сообщение об ошибке.
Хотя лично мне например не удалось с помощью ASSOC/FTYPE добиться того, чтобы созданная ассоциация работала (в cmd).

Ассоциации для файлов при запуске из командной строки

Posted: Fri 22 Sep, 2017 09:46
by Smitis
John Doe wrote: Fri 22 Sep, 2017 07:48Хотя лично мне например не удалось с помощью ASSOC/FTYPE добиться того, чтобы созданная ассоциация работала (в cmd).
А в PATHEXT расширение добавили?

Ассоциации для файлов при запуске из командной строки

Posted: Fri 22 Sep, 2017 10:27
by John Doe
Smitis wrote: Fri 22 Sep, 2017 09:46А в PATHEXT расширение добавили?
Выше говорилось, что файлы без расширения нельзя добавить. Похоже что можно:
set pathext

Code: Select all

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.
После этого при запуске предлагает программу для открытия.
Но флажок "Использовать её для всех файлов такого типа" недоступен, серый. Т.е. толку мало..

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

Ассоциацию я пробовал и вручную задать:
assoc .

Code: Select all

.=noext
ftype noext

Code: Select all

noext=echo %1

Ассоциации для файлов при запуске из командной строки

Posted: Fri 22 Sep, 2017 12:29
by HaRT
John Doe, насколько я понимаю, в системной ассоциации надо указать именно исполняемый файл (например, %COMSPEC%). echo таковым не является. Впрочем, для файлов без расширения у меня и это не завелось (но не очень-то и хотелось).

Ассоциации для файлов при запуске из командной строки

Posted: Fri 22 Sep, 2017 12:41
by John Doe
А вот кстати вы правильно указали на мою ошибку.

Code: Select all

ftype noext=cmd /c echo %1
После этого у меня файлы без расширения заработали как исполняемые.

PATHEXT тоже правил.

P. S.
Проблема только в том, что фар это в новом окне открывает.

Ассоциации для файлов при запуске из командной строки

Posted: Fri 22 Sep, 2017 12:51
by Smitis
John Doe,
Я могу кое в чём ошибится, но механизм использования PATHEXT следующий:
- Исполняемыми файлами в cmd считаются файлы с расширение из pathext.
- Если файл указан без расширения, поочерёдно подставляются расширения из pathext и ищется соответствующий файл по стандартному алгоритму.
- Если файл найден, для него выполняется команда из глагола open в соответствующих разделах реестра (HKCU\Software\Classes или HKCR). Возможно, вместо open используется глагол по умолчанию, заданный в разделе выше (в shell, надо бы проверить).
Но пустое расширение не предусмотрено в реестре! Хотя в pathext такое расширение, похоже, обрабатывается.
Впрочем, попробуйте задать в реестре в HKCR расширение из одной точки, может сработает, как в pathext.

Ассоциации для файлов при запуске из командной строки

Posted: Fri 22 Sep, 2017 13:05
by Smitis
Попробовал - так работает.
- Добавил пустое расширение в PATHEXT.
- Добавил ветку HKEY_CLASSES_ROOT\.\shell\open\command со значением C:\Windows\System32\cscript.exe //nologo //e:javascript "%1"
Скрипт на JS без расширения из CMD выполнился.
А вот из ФАРа, да, открывается в отдельном окне.

Ассоциации для файлов при запуске из командной строки

Posted: Sun 24 Sep, 2017 17:06
by DrKnS
Smitis wrote: Fri 22 Sep, 2017 13:05из ФАРа, да, открывается в отдельном окне.
А это даже баг.
5038.

Ассоциации для файлов при запуске из командной строки

Posted: Mon 25 Sep, 2017 19:36
by John Doe
5041, продолжает открываться в отдельном

Ассоциации для файлов при запуске из командной строки

Posted: Mon 25 Sep, 2017 20:37
by DrKnS
John Doe wrote: Mon 25 Sep, 2017 19:36продолжает открываться в отдельном
Указывайте полный путь, а не просто cmd.

Ассоциации для файлов при запуске из командной строки

Posted: Mon 25 Sep, 2017 21:01
by DrKnS
А впрочем - почему бы и нет. 5045.