Страница 22 из 243
Добавлено: Вс сен 11, 2011 23:16
LonerD
MVV, Flasher
По поводу экспорта ключей реестра в файл. Вы пробовали предложенные варианты? У меня ни один не сработал, пробовал ещё разные способы с расставлением кавычек - reg-файл так и не сохранился.
Добавлено: Вс сен 11, 2011 23:36
MVV
А у тебя точно в реестре существует раздел HKCU\Total? Обычно разделы программ создаются в HKCU\Software, но не напрямую в HKCU.
Да, я пробовал, правда с другим ключом (твоего ключа у меня нет и никогда не было), всё работает. Вот две строки, которые я только что попробовал:
Код: Выделить всё
ShellExec /SW_HIDE "cmd.exe" '/c "reg export "HKEY_CURRENT_USER\Environment" "%commander_path%\Data\Total.reg""'
ShellExec /SW_HIDE /EV "reg.exe" 'export "HKEY_CURRENT_USER\Environment" "%commander_path%\Data\Total.reg"'
Добавлено: Вс сен 11, 2011 23:38
Flasher
LonerD
Аналогично, давал рабочие варианты.
Добавлено: Пн сен 12, 2011 02:43
LonerD
Не повезло значит. Ключ был и есть, создал специально для проверки отработки команды. По три раза каждый вариант перепробовал, - не работало. Сейчас те же строки ввожу - ключ сохраняется. Чудеса...
Видимо, что-то где-то цеплялось и не успевало сработать. Уже замечал относительно других команд, что обычно работают, но иногда не срабатывают (не успевают сработать). Попробую в своём Autorun.cfg понаставить паузы Sleep.
Добавлено: Пн сен 12, 2011 09:55
MVV
Не вижу связи между задержками и экспортированием куска реестра в файл. Экспортирование никак не зависит от тотала и вполне может работать параллельно с тоталом. Другое дело - присутствует ли в момент запуска экспортирования тот ключ реестра.
Кстати,
Loopback, как насчет добавления для функции
ShellExec параметра
/WAIT, позволяющего дождаться выполнения задачи перед выполнением следующей команды автозапуска? Приведу код на Си, ничего сложного нет:
Код: Выделить всё
SHELLEXECUTEINFO shx;
shx.cbSize=sizeof(SHELLEXECUTEINFO);
shx.fMask=need_to_wait_process ? SEE_MASK_NOCLOSEPROCESS : 0;
shx.hwnd=0;
shx.lpVerb=0;
shx.lpFile=path_to_program;
shx.lpParameters=parameters;
shx.lpDirectory=working_directory;
shx.nShow=show_flag;
bool success=ShellExecuteEx(&shx)!=0;
if (success && need_to_wait_process) {
WaitForSingleObject(shx.hProcess, INFINITE);
CloseHandle(shx.hProcess);
}
Добавлено: Пн сен 12, 2011 20:04
Flasher
MVV писал(а):как насчет добавления для функции ShellExec параметра /WAIT
Я бы вообще ожидание по умолчанию сделал без всяких ключей.
Добавлено: Пн сен 12, 2011 21:26
MVV
Можно и так. Основная масса действий действительно должна выполняться последовательно. Потом, вряд ли это ухудшит уже существующие скрипты автозапуска.
Тогда добавить флаг /NOWAIT.
Добавлено: Вт сен 13, 2011 18:15
LonerD
Можно ли через Autorun_Starter удалить переменные окружения, создаваемые в autorun.cfg ?
Например, создаю переменную для запуска из тотала 32 и 64-битных приложений в зависимости от битности системы:
SetEnv /A /EV OSArch %autorun_osarch%
После закрытия Тотала она уже не нужна. Как её возможно удалить?
Добавлено: Вт сен 13, 2011 18:44
Flasher
LonerD
Так это переменные внутреннего окружения, действующие в текущем сеансе. Ниоткуда кроме как из окна ТС ты их вызвать не сможешь, разве что не пропишешь в системную переменную типа Path. При закрытии окна они так же вместе с ним и свернутся.
Добавлено: Вт сен 13, 2011 20:08
LonerD
Ага. Кажись, понял причину.
Переменные действительно исчезают после закрытия тотала.
А вот если тотал не закрывать, а перезапустить с помощью Tinny TC Restarter или ReloadTC, то вот тут поджидает самое интересное. Мало того, что переменные среды остаются, но если перед перезапуском поправить autorun.cfg и прописать в нём другие значения переменных сред, то последствия могут быть самые непредсказуемые, вплоть до того, что значения новых переменных иногда (не всегда, но случалось) дописываются в конец к старым переменным.
А существует ли тогда рестрартер, который полностью выгружает Тотал, а потом запускает его? Или же этого невозможно добиться в силу того, что рестартер как таковой запускается из-под Тотала?
Добавлено: Вт сен 13, 2011 20:24
Flasher
Я пользуюсь
своим скриптом, подобных глюков не заметил.
Добавлено: Вт сен 13, 2011 21:20
MVV
LonerD писал(а):А существует ли тогда рестрартер, который полностью выгружает Тотал, а потом запускает его? Или же этого невозможно добиться в силу того, что рестартер как таковой запускается из-под Тотала?
Это надо экспериментировать с окружением при запуске процесса. Но точно не знаю, как это сделать.
И вообще, что значит "полностью выгружает"? И что понимается под чистой средой? Среда Проводника? Тогда надо как-то сказать Проводнику, что надо запустить тотал.
Добавлено: Вт сен 13, 2011 21:25
ApceH
LonerD
Проверял через пресет с per? Или peq+pee.
Добавлено: Ср сен 14, 2011 01:54
LonerD
И вообще, что значит "полностью выгружает"?
Не знаю. Но при перезапуске - что утилитами, что скриптом, - переменные остаются. Получается, что-то не даёт им полностью выгрузиться/удалиться.
Как я получил такую ситуацию (если кому интересно будет повторить):
Код: Выделить всё
По пунктам.
Установить плагин Environment Variables (отображение переменных сред).
В Autorun.cfg добавить строку
SetEnv /A /EV OSArch %autorun_osarch%
Сохранить Autorun.cfg.
Закрыть-открыть или же перезапустить Тотал.
Перейти в сетевое окружение - Environment Variables - Current process (Total Commander)
Там должна быть переменная OSArch, которая равна 32 или 64.
Открыть Autorun.cfg и удалить добавленную строку.
Теперь перезагрузить Тотал (через утилитку или скриптом).
Опять зайти в Environment Variables.
OSArch всё-ещё там, хотя в авторане она отсутствует (переменная осталась от предыдущего запуска Тотала и не удалилась при перезапуске).
А теперь закрыть Тотал полностью и открыть его снова. Переменной уже нету.
Добавлено: Ср сен 14, 2011 02:50
Flasher
LonerD писал(а):Код: Выделить всё
Установить плагин Environment Variables (отображение переменных сред).
Перейти в сетевое окружение - Environment Variables - Current process (Total Commander)
Там должна быть переменная OSArch, которая равна 32 или 64.
Эти действия заменяются на выполнение из комстроки:
%comspec% /k set OSARCH