Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] странный возврат макроса @TempDir (http://forum.oszone.net/showthread.php?t=188833)

saavaage 20-10-2010 09:51 1522869

странный возврат макроса @TempDir
 
суть проблемы:
1. вношу твиками новые значение для путей к папкам временных файлов (Temp) и переменных сред (Tmp):
а)Temp (например, путь D:\1)
Код:
Код:

$Input_MyTemp = 'D:\1'
RunWait(@COMSPEC & ' /c Echo Y | Cacls ' & $Input_MyTemp&' /E /P "Все":F', '', @SW_HIDE)
      RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'TEMP', 'REG_SZ', $Input_MyTemp)
;~    RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet\Control\Session Manager\Environment', 'TEMP', 'REG_SZ', $Input_MyTemp)
      RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment', 'TEMP', 'REG_SZ', $Input_MyTemp)
      RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Session Manager\Environment', 'TEMP', 'REG_SZ', $Input_MyTemp)
      RegWrite('HKEY_CURRENT_USER\Environment', 'TEMP', 'REG_SZ', $Input_MyTemp)

б) Tmp (например, D:\Tweaks):
Код:
Код:

$Input_MyTmp ='D:\Tweaks'
RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'TMP', 'REG_SZ', $Input_MyTmp)
;~    RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet\Control\Session Manager\Environment', 'TMP', 'REG_SZ', $Input_MyTmp)
      RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment', 'TMP', 'REG_SZ', $Input_MyTmp)
      RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Session Manager\Environment', 'TMP', 'REG_SZ', $Input_MyTmp)
      RegWrite('HKEY_CURRENT_USER\Environment', 'TMP', 'REG_SZ', $Input_MyTmp)

2. Логично ожидать получение следующего результата -пути для:
а) Temp - D:\1
б) Tmp - D:\Tweaks

3. В итоге получаем:
Реестр - все согласно твиков
Панель управления -> Система -> Дополнительно -> Переменные среды - все согласно твиков
Вызов Msgbox (0, '', @TempDir) упорно возвращает D:\Tweaks...

Не понимаю, что я сделал не так???

PS Папки Temp и Tmp уже созданы.

Iska 20-10-2010 12:13 1522986

saavaage, как и здесь: #4, текущий процесс уже имеет установленную среду. Это раз. Второе — данные параметры считываются из реестра при старте ОС/входе пользователя в систему соответственно, так что, банально сделать запись в реестр недостаточно. В некоторые Resource Kit'ы входит утилита «setx.exe», одно из применений которой — задание переменных окружения (опять же, только для вновь создаваемых процессов) с сохранением в профиле [читай, реестре] системы/текущего пользователя. Как выполнить уведомление о произведённых изменениях в реестре смотрите в самом конце статьи Environment Variables (Windows):
читать дальше »
Цитата:


Calling SetEnvironmentVariable has no effect on the system environment variables. To programmatically add or modify system environment variables, add them to the HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment registry key, then broadcast a WM_SETTINGCHANGE message with lParam set to the string "Environment". This allows applications, such as the shell, to pick up your updates.


saavaage 20-10-2010 15:18 1523163

Cпасибо большое, пошел курить маны... :)

И все-таки, непонятно, почему макрос отображает не просто старое значение, а неверное значение (я менял и Temp и Tmp и он отображает, именно, новый путь к Tmp, вместо старого пути к Temp ("С:\Temp"))...

saavaage 20-10-2010 18:30 1523350

итак, на настоящий момент выяснил следующее:

1. макрос @TempDir должен отображать путь к папке временных файлов, считанный системой при ее загрузке. Т.е. при изменении в входе сессии пользователем, все равно, отображаются старые значения.

2. при разных путях к Temp и Tmp макрос @TempDir отображает путь к Tmp, игнорируя Temp. Даже после перезагрузки он стандартно отображает путь к Tmp, а не к моей папке временных файлов Temp.

3. Складывается ощущение, что макрос изначально выдает информацию именно по Tmp, а не Temp. Проверить быстро не могу, т.к. у меня изначально винда ставится с одинаковым путем и для Temp и Tmp...

PS Во избежания эффекта "кривых ручек" для задания новых значений Temp и Tmp применял вполне официальную утилиту setenv.exe. Эффект - аналогично эффекту вноса через твики (в шапке).

Если возможно, уважаемые гуру, отпишитесь баг ли это и если нет, то в чем я не прав...

FlatX007 20-10-2010 21:24 1523478

Путь то есть а папки нет - надо создать папку ...

saavaage 20-10-2010 23:55 1523566

FlatX007, ну я не такой дремучий... Папка уже создана, просто в примере я этого не указывал, думал, что это очевидно... Шапку поправил.

FlatX007 21-10-2010 00:14 1523576

тут все папки ...

Код:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders

saavaage 21-10-2010 00:21 1523579

FlatX007,
считать информацию можно (так или иначе), вопрос в том, что у меня в скрипте (утилита SmartXP) много завязано на создании файлов и их подхвате через переменную @TempDir и меня эта ситуация (с некорректным возвратом), очень сильно напрягает. Да и на будущее, этот вопрос необходимо "дожать".

Iska 21-10-2010 05:21 1523673

Цитата:

Цитата FlatX007
тут все папки ...
Код:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders

:): Длинная и печальная история ключа Shell Folders. Я сам этим ранее пользовался.

Цитата:

Цитата saavaage
2. при разных путях к Temp и Tmp макрос @TempDir отображает путь к Tmp, »

У меня — путь из пользовательской «%tmp%». Версия AutoIt 3.3.4.0. Ну и что? По всем рекомендациям и унаследованная переменная окружения TMP, и более новая TEMP обязаны указывать в одно и то же местоположение: папку временных файлов. Сам AutoIt пользует TMP. Про GetTempPath, для личных нужд, Вам уже сказали. А зачем Вам «setenv»? Вы пробовали после записи в реестр разослать широковещательное сообщение с WM_SETTINGCHANGE?

saavaage 21-10-2010 06:24 1523679

Iska, для чего тогда в панели управления и реестре предусмотрена возможность задания разных путей для Tmp и Temp?
Цитата:

Цитата Iska
А зачем Вам «setenv»? »

только для одного - хочу, чтобы настройки вступали в строй не после перезагрузки системы, а сразу.

PS у меня и Tmp и Temp имеют одно и тоже месторасположение, но как с этим у других юзеров я могу только догадываться...

Iska 21-10-2010 09:24 1523750

Цитата:

Цитата saavaage
Iska, для чего тогда в панели управления и реестре предусмотрена возможность задания разных путей для Tmp и Temp?

Не только для «Tmp» и «Temp», но и для любой другой переменной окружения. Причём, не только путей, но и любой произвольной строки. Никто ведь не заставляет задавать разные пути, как раз наоборот. Это ведь всего лишь вопрос соглашения — что в TEMP и TMP будет храниться путь ко временным файлам, а, скажем, в COMSPEC — путь к интерпретатору команд.

saavaage 21-10-2010 16:02 1524066

Тема более детально была обсуждена на русском форуме.
Ссылка http://autoit-script.ru/index.php/topic,2916.0.html
Чтобы не плодить топики, закрываю как решенную

Спасибо, Iska, за помощь!


Время: 23:01.

Время: 23:01.
© OSzone.net 2001-