Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» как изменить значение переменной %Temp% для одной проги

Автор: oshizelly
Дата сообщения: 10.02.2005 23:43
Собственно сабж.
Как известно, в Windows XP можно задать произвольное расположение для директория %Temp%.
А можно ли и как изменить значение этого параметра только для одной конкретной прикладной программы, не меняя глобальных настроек системы?
Заранее спасибо за помощь!
Автор: Guzenkov
Дата сообщения: 11.02.2005 09:13
Создай bat файл
в первой строке напиши
SET %TEMP%=D:\TEMP
(ну или что то подобное)
Второй строкой запсукай приложение
Автор: dg
Дата сообщения: 11.02.2005 10:17
Guzenkov
Цитата:
SET %TEMP%=D:\TEMP
тогда уж не set, а setlocal.
Автор: ooptimum
Дата сообщения: 11.02.2005 16:10
И уж если быть до конца последовательным, то не "%TEMP%", а просто "TEMP".
Автор: oshizelly
Дата сообщения: 10.10.2008 20:11
Предложенное здесь 3 года назад решение страдает одним весьма существенным недостатком: оно все-таки меняет глобальное значение переменной TEMP для всей системы и всех приложений, то есть, все-таки не совсем отвечает на вопрос.

Наверное, можно как-то сделать так, чтобы после завершения работы приложения переменной TEMP автоматически возвращалось ее искходное значение. Но, AFAIK при помощи обычного батника это не решается. А как решается?

Впрочем, даже и это будет не совсем корректное решение, поскольку значение переменной TEMP все же изменяется глобально на все время, пока активно запущенное приложение. Это может основательно запутать другие проги, работающие с папкой %TEMP% (а таких довольно много), которые не смогут найти свои ранее созданные файлы, оставшиеся в старом %TEMP%.

Может быть, все же можно как-то подсунуть значение переменной TEMP одной конкретной проге, не меняя глобальных настроек системы? Чтобы, скажем, висел какой-то кусок кода в памяти, перехватывающий всю рбаоту нашего приложения с папкой %TEMP% и перенаправляющий ее по новому адресу на диске (извиняюсь за детское изложение, но я не программер).

Заранее спасибо!
Автор: AlmazSpb2
Дата сообщения: 11.10.2008 17:21

Цитата:
Может быть, все же можно как-то подсунуть значение переменной TEMP одной конкретной проге, не меняя глобальных настроек системы?

Ну зачем так сложно ? Функция CreateProcess, ответственная за запуск приложений, одним из своих параметров (pvEnvironment) принимает как раз ссылку на блок памяти, хранящий строки переменных окружения. Остается лишь написать загрузчик, который модифицирует этот блок так, как вам надо - для хорошего программиста работы на полчаса.
Автор: oshizelly
Дата сообщения: 11.10.2008 21:01
AlmazSpb2

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


Я думал, что есть какое-то готовое решение, либо на уровне OS, либо как обычное приложение.
Ведь задача перенаправить вывод временных файлов в дргоуй директорий, на другой диск и пр. встречается довольно часто, скажем, как-то же она решается при создании портабельных версий прог (я имею в виду настояшие портабельные версии, которые не следят в реестре и на системном диске). Вот и думаю, что должно же существовать какое-то относительно простое стандартное решение, не требующее привлечения высококлассного программиста.
Автор: evle
Дата сообщения: 12.10.2008 15:55
oshizelly

Цитата:
оно все-таки меняет глобальное значение переменной TEMP для всей системы и всех приложений

С чего бы вдруг? Открываем окно cmd, пишем set temp=e:\. Открываем второе окно cmd, пишем set temp, видим, что значение старое.
А вот как ухитриться поменять значение для всех запущенных программ, мне самому интересно. :-)
Вообще, гипотеза о глобальном изменении значения переменной выглядит странно, это ведь легко проверяется.
Автор: oshizelly
Дата сообщения: 12.10.2008 18:07
evle

Цитата:
С чего бы вдруг? Открываем окно cmd, пишем set temp=e:\. Открываем второе окно cmd, пишем set temp, видим, что значение старое...
Вообще, гипотеза о глобальном изменении значения переменной выглядит странно, это ведь легко проверяется

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

1) Пишем и запускаем батник вида (к примеру):

Код: set temp = D:\Temp
C:\progra~1\micros~2\office11\winword.exe
Автор: evle
Дата сообщения: 13.10.2008 15:20
oshizelly

Цитата:
Я и проверял.

Алгоритм проверки в студию.

Цитата:
Так это все дожно работать?

Именно так всё и работает.

По умолчанию программы наследуют переменные окружения от родительского процесса. В случае батника изменения коснутся только батника и программ, из него запущенных.
Разумеется, если из запущенного таким образом ворда запустить что-нибудь ещё, то изменения унаследуются и дальше.
Автор: oshizelly
Дата сообщения: 13.10.2008 19:36
evle

Цитата:

Цитата: oshizelly
Цитата:Я и проверял.

Алгоритм проверки в студию.

Страницы: 1

Предыдущая тема: Вопрос Администраторам WinXP


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.