Страница 41 из 243

Добавлено: Вс дек 16, 2012 16:57
KopBuH
Loopback:
Можете сделать команду для вызова выполнения внешнего скрипта, что-то вроде ExecCfg autorun_custom.cfg ?.

Добавлено: Вс дек 16, 2012 17:11
Flasher
У кого-нибудь работает такая команда?

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

Pragma AutorunFinalizeSection

ShellExec /EV /SW_HIDE %comspec% '/c del C:\Sample.txt'

Добавлено: Вс дек 16, 2012 17:23
KopBuH
Flasher писал(а):У кого-нибудь работает такая команда?

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

Pragma AutorunFinalizeSection

ShellExec /EV /SW_HIDE %comspec% '/c del C:\Sample.txt'
Так

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

ShellExec /EV /SW_HIDE cmd.exe '/c del C:\Sample.txt'
и так

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

ShellExec /EV /SW_HIDE '%COMSPEC%' '/c del C:\Sample.txt'
работает.

Добавлено: Вс дек 16, 2012 17:24
Flasher
Нужно именно при закрытии ТС.

Добавлено: Вс дек 16, 2012 17:27
KopBuH
Flasher писал(а):Нужно именно при закрытии ТС.
добавь одинарные кавычки к строке %COMSPEC% - и всё заработает :wink:
пример:

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

ShellExec /EV /SW_HIDE '%COMMANDER_PATH%\Macroses\sample.exe' ' -K "%RANDOM%" "%commander_path%\sample.txt"'

Добавлено: Вс дек 16, 2012 17:28
Flasher
Одинарные кавычки тут не нужны. Пробелов нет. Кавычки пользы не принесут. Просто баг похоже. То ли параметры не обрабатываются после директивы выхода, то ли с кавычками непорядок. Жду автора..

Добавлено: Вс дек 16, 2012 21:10
Loopback
KopBuH писал(а):Можете сделать команду для вызова выполнения внешнего скрипта, что-то вроде ExecCfg autorun_custom.cfg ?.
Нет, на текущей реализации это вряд ли получится. Единственное, что можно сделать - аналог include, т.е. включать в тело скрипта содержимое другого файла. Однако, в этом случае надо будет следить, чтобы не получилась вложенность условий.
Flasher писал(а):Кстати, Loopback, а ты можешь добавить возможность работы с условиями без переноса строк и EndIf, как в VB?
В текущей реализации нет, для этого нужен полноценный парсер с разбивкой на токены.
Flasher писал(а):У кого-нибудь работает такая команда?
У меня отработала, на WinXP и на Win7.

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

Завтра сделаю дебажную версию, посмотрим, что там выдается.

Добавлено: Вс дек 16, 2012 21:33
MVV
Но не исключено, что это опять проблема с одной из самых оригинальных функций WinAPI AssocQueryString
А зачем вызывать эту странную функцию для команды ShellExec? С головой достаточно прямого вызова ShellExecuteEx...

Добавлено: Вс дек 16, 2012 22:37
Loopback
MVV писал(а):А зачем вызывать эту странную функцию для команды ShellExec?
ShellExecuteEx хороша, если нужно только запустить процесс и больше с ним ничего не делать. Однако когда я делал закрытие процесса при выходе, с ней возникли проблемы. Поэтому пришлось перейти на более предсказуемый CreateProcess.

Добавлено: Вс дек 16, 2012 23:52
MVV
А какие проблемы-то? Дескриптор процесса она тоже может возвращать... Опиши, может разберемся.

Добавлено: Пн дек 17, 2012 14:58
Loopback
MVV писал(а):А какие проблемы-то?
Не помню точно, уже больше года прошло. Вроде не удавалось получить корректный pid из дескриптора процесса.

Flasher
Попробуй эту версию. В каталоге плагина будет создан файл debug.log, в нем для каждого вызова ShellExec три строчки. Скинь те, которые относятся к проблемному.

Добавлено: Пн дек 17, 2012 18:03
Flasher
Loopback
Ничего особого нет.

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

Source: C:\WINDOWS\system32\cmd.exe
AssocExePath: %1
CmdLine: "C:\WINDOWS\system32\cmd.exe"
Проверял на XP и 7 x32.

Добавлено: Пн дек 17, 2012 18:18
Loopback
Flasher
Все правильно, у меня то же самое. Только при этом файл удаляет.

Случайно права на удаляемый файл не ограничены? Или может атрибут какой-нибудь системный стоит?

Добавлено: Пн дек 17, 2012 18:40
Flasher
Loopback
Никаких ограничений. Просто команды не отрабатывают. С любым файлом так.

Добавлено: Пн дек 17, 2012 20:08
MVV
Loopback,
Да, pid не получить просто так. Но нужен ли он тебе? У тебя же есть дескриптор, который можно использовать для проверки состояния процесса и его завершения. А что ты делаешь по pid?