Запускатель и PATHEXT

Хотите говорить о Far и не знаете, куда обратиться?
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Запускатель и PATHEXT

Post by John Doe »

Столкнулся со непонятным поведением: при запуске npm почему-то открывалась отдельная консоль.

Как выяснилось причиной было наличие ;; в PATHEXT, плюс в путях имеются несколько файлов с именем npm:
- npm.cmd
- npm (без расширения)

По факту при наборе npm из командной строки запускается npm.cmd, но в отдельном окне.
Полагаю что это происходит потому что фар неверно определяет какой из двух файлов будет запускаться.

Откуда взялось ;; я не помню (может и сам добавил), после того как убрал проблема исчезла.
Но вопрос остался: может ли фар в этой ситуации поступать умнее?
https://t.me/FarManager — Telegram чат
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Запускатель и PATHEXT

Post by DrKnS »

John Doe wrote: Wed 04 Nov, 2020 15:12По факту при наборе npm из командной строки запускается npm.cmd, но в отдельном окне.
Полагаю что это происходит потому что фар неверно определяет какой из двух файлов будет запускаться.
Far находит пустое расширение в pathext и файл "npm" с пустым расширением - бинго.
Файл "npm" обнюхивается, он не консольный и поэтому запускается в отдельном окне.
Far делает ShellExecuteEx("path\to\npm"), изъявляя этим намерение запустить именно файл без расширения.
А дальше Windows по какой-то своей неисповедимой логике обнаруживает, что в той же папке есть npm.cmd и запускает его, а не то, что просили.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Запускатель и PATHEXT

Post by DrKnS »

В целом, запускатель невероятно переусложнен.

Основной challenge - определить, надо ли ожидать завершения запускаемой команды.
Сейчас ради этого переизобретается половина системного запускателя и сворачиваются горы - анализируются ассоциации в реестре, ищутся и исследуются файлы на диске, по очереди подставляя path/pathext и гордо предполагая, что мы постигли логику ОС и запустится именно то, что мы нашли. Что, внезапно, далеко не всегда так.

Есть, однако, и другой способ - просто тупо передать ОС то, что ввел пользователь, как есть, и посмотреть на результат.
Если что-то запустилось, то посмотреть на процесс и ждать только в том случае, если процесс консольный.
Это, наверное, позволило бы выкинуть процентов 90 кода и получать более адекватные результаты, но есть нюанс: тип процесса нам надо знать еще до запуска, т.к. если он консольный, то надо подготовить почву, убрав с экрана панели и т.п., а если нет, то все это бессмысленно и приводит только к мерцанию панелей.

Это, в принципе, тоже решаемо, несколькими путями:
  • Машина времени. Идеально, но увы, we are limited by the technology of our time, but one day...
  • Подготавливать почву всегда и смириться с тем, что панели будут мерцать при запуске notepad и paint.
  • Запускать без подготовки, быстро анализировать запущенный процесс и, если да, быстро вытирать все, надеясь, что успеем до того, как процесс решит что-то вывести в консоль. Наверное, будет работать, т.к. на инициализацию процесса требуется какое-то время.
  • Аналогично предыдущему пункту, но запускать процесс как paused, анализировать, опционально подготавливать экран и снимать с паузы. Увы, не работает с ShellExecuteEx, только с CreateProcess.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Запускатель и PATHEXT

Post by John Doe »

Выкинуть 90% это конечно соблазнительно..
https://t.me/FarManager — Telegram чат
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Запускатель и PATHEXT

Post by citRiks »

DrKnS wrote: Wed 04 Nov, 2020 16:33Запускать без подготовки, быстро анализировать запущенный процесс и, если да, быстро вытирать все, надеясь, что успеем до того, как процесс решит что-то вывести в консоль. Наверное, будет работать, т.к. на инициализацию процесса требуется какое-то время.
мне кажется именно так и надо делать.
кому и как может мешать доля секунды если что-то и моргнет - не могу себе представить кому.
я бы даже и панели не вытирал, так как-то естестевеннее что ли
Это, наверное, позволило бы выкинуть процентов 90 кода и получать более адекватные результаты, но есть нюанс: тип процесса нам надо знать еще до запуска, т.к. если он консольный, то надо подготовить почву, убрав с экрана панели и т.п., а если нет, то все это бессмысленно и приводит только к мерцанию панелей.
на мой взгляд рекордно несущественный нюанс который только может быть.
T.e. пусть моргнет.
вообще интересно, как люди которые не могут мириться с долей секунды мерцанья, как они пользуются браузерами например...
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

Запускатель и PATHEXT

Post by HaRT »

citRiks wrote: Wed 04 Nov, 2020 17:27 кому и как может мешать доля секунды если что-то и моргнет - не могу себе представить кому.
citRiks wrote: Wed 04 Nov, 2020 17:27 на мой взгляд рекордно несущественный нюанс который только может быть.
T.e. пусть моргнет.
Не могу с вами согласиться, моргание панелей меня раздражает. И не меня одного — гляньте, например, на востребованность плагина Smart Launch в пору Far 1.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Запускатель и PATHEXT

Post by Smitis »

DrKnS wrote: Wed 04 Nov, 2020 16:33 Это, наверное, позволило бы выкинуть процентов 90 кода и получать более адекватные результаты
Главное, не сломайте текущее поведение, использующее ФАРовские ассоциации, плиз!
Разум когда-нибудь победит.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Запускатель и PATHEXT

Post by citRiks »

HaRT wrote: Wed 04 Nov, 2020 17:47 Не могу с вами согласиться, моргание панелей меня раздражает. И не меня одного — гляньте, например, на востребованность плагина Smart Launch в пору Far 1.
Особенно сильно не вник в SmartLaunch, но я тут и не судья конечно, в востребованность верю :)
Но хочу спросить, вот вы кликаете на большинстве сайтов, следующая страница ведь редко когда не то что в ту же секунду,
а и в 3 секунд редко откроется.
Пока же она открывается, видим или белую простыню или кривую частично загруженную оную страницу.
Не мешает белая простыня 2 секунды а долю секунды черной простыни мешает?
Ну допустим, так, не важно, мне в любом случае не понять.
Предложу в порядке бреда, так как вряд ли кто сможет или захочет, или найдет время занятся
А может оставить пресловутые 10% кода лаунчера как ДрКнС сказал,
а остальные 90% вынести в АПИ и плагины вроде лаунчеров каждому на свой вкус?
Как бонус - чем меньше кода, более понятна структура проги и замысел создателей,
и тем самым легче будет человеку со стороны что-то с этим делать
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Запускатель и PATHEXT

Post by Smitis »

drkns 05.11.2020 19:04:14 +0000 - build 5698

1. Экспериментально: уменьшим количество параметров запускателя.
Эх, всё-таки сломали запускатель :(
Как минимум, при запуске консольных утилит из пользовательского меню при передаче списка выделенных файлов, например
cmd.exe /c echo "@!@U!"
Разум когда-нибудь победит.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Запускатель и PATHEXT

Post by DrKnS »

Smitis, 5699.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Запускатель и PATHEXT

Post by DrKnS »

Итак, прототип:
  1. Поиск запускаемого не производится - ОС видней.
  2. Ждать или нет, в отдельном окне или нет - определяется постфактум, когда (и если) процесс уже запущен.
  3. Как следствие пункта 2 - моргает всегда.
  4. Как следствие пункта 1 - System.Executor.UseAppPath больше нет.
У меня вроде бы все работает, поэтому к концу недели все это вполне может оказаться в мастере и у всех, так что кричите, если что не так.
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Запускатель и PATHEXT

Post by Yegor »

В моих базовых сценариях все работает, как и раньше (кроме мигания панелей, но мне это не мешает).
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Запускатель и PATHEXT

Post by Smitis »

Отвалилось всё, что только возможно. Теперь ассоциации ФАРа при запуске из комстроки, как я понял, больше не используются?
Разум когда-нибудь победит.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Запускатель и PATHEXT

Post by DrKnS »

Smitis wrote: Wed 11 Nov, 2020 10:27Отвалилось всё, что только возможно.
С такими репортами мы далеко не уедем.
Теперь ассоциации ФАРа при запуске из комстроки, как я понял, больше не используются?
Используются, здесь ничего не менялось.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Запускатель и PATHEXT

Post by Smitis »

DrKnS wrote: Wed 11 Nov, 2020 11:12 С такими репортами мы далеко не уедем.
Но это ещё не багрепорт. Хотя, в моём вопросе почти всё верно. Подробнее:
Допустим, есть testvbs.vbs с единственной строчкой WScript.Echo "ZXCVBNM"
Ассоциации системы настроены на выполнение WSH через гуевый сервер сценариев wscript (включаем так cscript //h:wscript)
В ФАРе задана ассоциация на выполнение сценариев *.vbs cscript.exe "!\!.!"
"Use Windows registered types" выключено.
Помещаем скрипт куда-нибудь в %PATH% (я кладу в %WINDIR%) и выходим ФАРом из этой папки, например, в корень C:\.
Выполняем в командной строке testvbs
Предыдущее поведение: выводится сообщение в консоль (выполнилось через cscript).
Новое поведение: выводиться гуевое окно с сообщением (выполнилось через wscript).
Выполняем в командной строке: testvbs.vbs
Предыдущее поведение: выводится сообщение в консоль.
Новое поведение: сообщение об ошибке Ошибка ввода: Не удается найти файл сценария "C:\testvbs.vbs" (подставился текущий путь, из папки со скриптом выполнится как задумывалось - выведется сообщение в консоль)
Last edited by Smitis on Wed 11 Nov, 2020 13:59, edited 1 time in total.
Разум когда-нибудь победит.
Post Reply

Return to “Обсуждение Far Manager”