Страница 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