SetEnv — утилита для изменения environment любому процессу
-
- Posts: 155
- Joined: Thu 12 May, 2005 14:27
- Location: Киев
- Contact:
SetEnv — утилита для изменения environment любому процессу
Тут вот недавно запостили сабж.
У него есть маленький недостаток, из-за которого я обломался, когда хотел написать такой плагин:
Не получается поменять переменные окружения процессам, запущенным как сервис.
Кстати, было бы хорошо при ошибках (не найден PID или IM или не удалось сделать, что просили) выдавать какие-то сообщения.
У него есть маленький недостаток, из-за которого я обломался, когда хотел написать такой плагин:
Не получается поменять переменные окружения процессам, запущенным как сервис.
Кстати, было бы хорошо при ошибках (не найден PID или IM или не удалось сделать, что просили) выдавать какие-то сообщения.
- John Doe
- Бюрократ
- Posts: 13807
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 426 times
- Contact:
...И добавить ключик /V - verboseКстати, было бы хорошо при ошибках (не найден PID или IM или не удалось сделать, что просили) выдавать какие-то сообщения.
Чтобы выводил список процессов, которым изменено окружение
А то кто его знакт, что там под маску попало...
Слегка offtopic:
Думаю, что не все разделяют оптимизм Андрея5. Не работает в Windows9x. (да-да, это один из плюсов)
Прилагаю решение для пользователей Win9x (если таковые не перевелись, конечно)
WINSET: установка переменных среды Windows 95
(взято с лицензионного CD-ROM)
- Attachments
-
- envvars.rar
- Microsoft WINSET - Sets values in the Windows 95 master environment
- (26.75 KiB) Downloaded 847 times
- Andrey Budko
- Posts: 1203
- Joined: Fri 01 Apr, 2005 14:03
- Contact:
- John Doe
- Бюрократ
- Posts: 13807
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 426 times
- Contact:
Какие параметры надо задать, чтобы изменить окружение только той консоли, из которой вызван SetEnvNT.exe?
Это вообще возможно сделать, не зная заранее PID и IM?
Если да, то почему бы не сделать так, чтобы при отсутствии в коммандной строке /PID и /IM подразумевалась бы текущая консоль?
Если нет, то почему не сделать так, чтобы подразумевался параметр /IM *?
Это вообще возможно сделать, не зная заранее PID и IM?
Если да, то почему бы не сделать так, чтобы при отсутствии в коммандной строке /PID и /IM подразумевалась бы текущая консоль?
Если нет, то почему не сделать так, чтобы подразумевался параметр /IM *?
- Andrey Budko
- Posts: 1203
- Joined: Fri 01 Apr, 2005 14:03
- Contact:
добавил. так же добавил возможность смотреть перменные окружения: SETENV aaa /IM ... /PID ......И добавить ключик /V - verbose
Чтобы выводил список процессов, которым изменено окружение
ну если, например, для фара - пиши SETENV aaa bbb /IM far.exe - не промахнешьсяКакие параметры надо задать, чтобы изменить окружение только той консоли, из которой вызван SetEnvNT.exe?
не знаю "как"почему бы не сделать так, чтобы при отсутствии в коммандной строке /PID и /IM подразумевалась бы текущая консоль?
слишком жестко. после такого, что не запустишь - там уже будет твоя переменнаяЕсли нет, то почему не сделать так, чтобы подразумевался параметр /IM *?
выложу позже
- Andrey Budko
- Posts: 1203
- Joined: Fri 01 Apr, 2005 14:03
- Contact:
- Andrey Budko
- Posts: 1203
- Joined: Fri 01 Apr, 2005 14:03
- Contact:
не то. в частности при запуске из фара ParentProcessID будет указывать на %comspec%, а в какой-нибудь более ранней версии может и на сам фар. а надо тот процесс в который идет стдаутпут, а идти он может куда угодно.zg wrote:PROCESS_BASIC_INFORMATION.InheritedFromUniqueProcessId.
на худой конец можно завести опцию /PARENT <level>
- John Doe
- Бюрократ
- Posts: 13807
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 426 times
- Contact:
А если проще?Andrey Budko wrote: не то. в частности при запуске из фара ParentProcessID будет указывать на %comspec%, а в какой-нибудь более ранней версии может и на сам фар. а надо тот процесс в который идет стдаутпут, а идти он может куда угодно.
на худой конец можно завести опцию /PARENT <level>
Code: Select all
Пока (ParentProcess==%COMSPEC%) делать level++
- Andrey Budko
- Posts: 1203
- Joined: Fri 01 Apr, 2005 14:03
- Contact:
Не сильно поможет, так как фары обычно запускают один из одного. Без необязательного параметра maxlevel не обойтись.или /PARENT /IM far.exe
Это может и проще, но не правильно и не универсально. Я сделал так:А если проще?
SETENV name=value [/PARENTS [maxlevel]] [/IM imagename ...] [/PID processid ...] [/V]
То есть чтобы установить переменную только фару, разумеется если SETENV запускается из него, надо выполнить:
SETENV aaa=bbb /PARENTS 2 /IM far.exe
- Andrey Budko
- Posts: 1203
- Joined: Fri 01 Apr, 2005 14:03
- Contact:
Выложил новую версию:
http://forum.farmanager.com/viewtopic.php?t=260
Теперь работает так:
http://forum.farmanager.com/viewtopic.php?t=260
Теперь работает так:
Code: Select all
SETENV variable[=string] [/PID processid ...] [/IM imagename ...]
[/P [depth]] [/V] [/U] [/W]
Description:
Displays, sets, or removes environment variables for any processes
Parameters list:
variable Specifies the environment-variable name.
string Specifies a series of characters to assign to the variable.
processid Specifies the process ID of the process.
imagename Specifies the image name of the process.
/P depth Specifies processing only chains of parental processes
with optional limitation of depth.
/V Specifies that verbose information be displayed in the output.
/U Specifies that output to a pipe or file to be Unicode.
/W Specifies to wait for pressing any key after execution.
NOTE:
Wildcards '*', '?' can be used to specify imagename and processid.
Re: SetEnv - утилита для изменения environment любому процессу
Здесь косвенно заявляется, что размер переменных окружения может быть до 2048 байт, поэтому попытался применить такой патч, правда, "на скорую руку" у меня оно так собралось, что рушит процесс у которого пытаешься вычитать переменную .
Code: Select all
--- C:/Program Files/setenv/src/env.cpp Wed Oct 15 14:22:56 2008
+++ C:/Program Files/setenv/src/env_patched.cpp Wed Oct 15 14:29:41 2008
@@ -36,3 +36,3 @@
case ENV_GET:
- TCHAR buf[256];
+ TCHAR buf[2048];
res = _GetEnvironmentVariable(info.Name, buf, sizeof(buf) / sizeof(TCHAR));