Autorun

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

HA3APET
Сообщения: 151
Зарегистрирован: Пн фев 22, 2010 05:43

Сообщение HA3APET »

Loopback
ещё из наблюдений, вдруг поможет

Код: Выделить всё

ShellExec /T /W "Camper.exe" "" "%commander_path%\Camper\"
Camper убивается - значок остаётся

Код: Выделить всё

ShellExec /TT /W "Camper.exe" "" "%commander_path%\Camper\"
Camper завершается - значка нет

но если так

Код: Выделить всё

ShellExec  /TT /W "AUTOFx.exe" "" "%commander_path%\autofx\" 
ShellExec  /T /W "Camper.exe" "" "%commander_path%\Camper\"
то Camper завершается (значок пропадает), как будто стоит /TT а не /T
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Попробовал перейти на связку AssocQueryString+CreateProcess, на первый взгляд работает нормально. Кстати, теперь не обязательно убивать дерево (что, впрочем, было очевидно с самого начала), достаточно использовать /T /W.

1.4.9.5 beta
HA3APET
Сообщения: 151
Зарегистрирован: Пн фев 22, 2010 05:43

Сообщение HA3APET »

Loopback
(
У меня плагин вообще ничего не запускает. Даже так

Код: Выделить всё

ShellExec "Camper.exe" "" "%commander_path%\Camper\"
Win7 x64 SP1
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

HA3APET
Чудеса... Дома работает, сейчас пробую на работе - действительно, ничего. Ладно, будем разбираться.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Ох, ну и намудрили же Майкрософт с AssocQueryString... Вроде документированная функция, а на разных системах работает как ей вздумается.

В общем, вроде поправил. Новую версию делать не стал, можно скачать по последней ссылке.
HA3APET
Сообщения: 151
Зарегистрирован: Пн фев 22, 2010 05:43

Сообщение HA3APET »

Loopback

Код: Выделить всё

ShellExec "Camper.exe" "" "%commander_path%\Camper\"
не запускается

но bat файлы запускаются

Код: Выделить всё

ShellExec "reg.bat" "" "%commander_path%"
но с полным игнорированием команд [/SW_HIDE|/SW_SHOWNORMAL|/SW_MINIMIZE|/SW_MAXIMIZE]
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

HA3APET писал(а):не запускается
А разве должен? Нужен же полный путь к файлу, или путь с переменными окружения. Запись

Код: Выделить всё

ShellExec "%commander_path%\Camper\Camper.exe" "" "%commander_path%\Camper"
должна работать.
HA3APET писал(а):но bat файлы запускаются
Может быть путь, где лежит reg.bat, есть в PATH? Только в этом случае будет работать такая форма запуска - имя файла без пути.
HA3APET писал(а):но с полным игнорированием команд
Да, это я упустил. Поправлю.
HA3APET
Сообщения: 151
Зарегистрирован: Пн фев 22, 2010 05:43

Сообщение HA3APET »

Loopback писал(а):А разве должен? Нужен же полный путь к файлу, или путь с переменными окружения
До этого работало) привык писать так

Код: Выделить всё

ShellExec "Camper.exe" "" "%commander_path%\Camper"
написал

Код: Выделить всё

ShellExec "%commander_path%\Camper\Camper.exe" "" "%commander_path%\Camper"
Запустилось! Да, теперь именно в такой форме.
Завершается всё исправно.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

HA3APET писал(а):До этого работало) привык писать так
Ну может какая-то особенность ShellExecute, который использовался раньше. Возможно, он пытается запустить файл из каталога, который задан в качестве рабочего.
Но вообще это не совсем корректная запись, поскольку путь (третий параметр) в данном случае - это именно рабочий каталог запускаемой программы, а отнюдь не путь, откуда должен запускаться файл. Такой вариант использования не подразумевался :)

В любом случае, пути предпочтительнее задавать явно или с переменными - так надежнее.
HA3APET писал(а):Запустилось! Да, теперь именно в такой форме.
Завершается всё исправно.
Хорошо, а то я уже отладочную версию начал делать.
HA3APET
Сообщения: 151
Зарегистрирован: Пн фев 22, 2010 05:43

Сообщение HA3APET »

Loopback
Осталось вернуть [/SW_HIDE|/SW_SHOWNORMAL|/SW_MINIMIZE|/SW_MAXIMIZE] и дело сделано :)
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

HA3APET писал(а):Осталось вернуть [/SW_HIDE|/SW_SHOWNORMAL|/SW_MINIMIZE|/SW_MAXIMIZE] и дело сделано
Версию не меняю, обновил ссылку.
HA3APET
Сообщения: 151
Зарегистрирован: Пн фев 22, 2010 05:43

Сообщение HA3APET »

Loopback, всё отлично работает, всё как задумано! Спасибо за работу.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

ShellExecute ищет запускаемую программу в надцати местах, в то время как CreateProcess просто запускает из текущей папки (которая в тотале вовсе не обязана совпадать с папками в панелях и может быть такой, какой её поставит для своих нужд тотал) или по полному пути, он даже системные приложения не запустит, если путь к папке System32 не указан. Поэтому при работе с CreateProcess необходимо указание полного пути к приложению.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

MVV
Есть подозрение, что на выходе ShellExecute использует тот же CreateProcess, только предварительно проделывает всякие поисковые операции - по реестру и не только.

На самом деле не так важно, какая функция скрывается внутри ShellExec, главное, чтобы команда работала как в документации. Наверно, стоит добавить туда указание, что первым параметром предполагается полный путь файла.

HA3APET писал(а):Ещё для ShellExec был бы полезен параметр - задержка запуска в секундах.
Так есть команда Sleep. Просто разместить вызовы в конце конфигурации с заданной задержкой.
HA3APET
Сообщения: 151
Зарегистрирован: Пн фев 22, 2010 05:43

Сообщение HA3APET »

Loopback
Да) я уже разобрался, что так можно, по-этому и удалил сообщение.
Ответить