| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS Windows > Установить PATH для Administrator |
| Автор: tishaishii 10.3.2007, 16:49 |
| Надо программно изменить PATH для самого главного пользователя универчально в WinXP\2003\98\Vista. |
| Автор: Kostyaxp 12.3.2007, 18:28 |
| В смысле поменять местоположение папки с аккаунтом админа? Уневирсально не выйдет (хотя бы потому что по-умолчанию путь для их хранения разный). |
| Автор: tishaishii 16.3.2007, 19:36 |
| Ну, чтобы после перезагрузки после команды "set PATH", я видел, то же, что установил перед перезагрузкой без дополнительных телодвижений. Ну в 98м я для этого меняю autoexec.bat, в XP, 2000, 2003, ... меняю в реестре, а надо как-то программно найти общее решение. Делаю инсталляшку своей АИС, надо. Другие же программы делают. |
| Автор: Tectoder 16.3.2007, 20:21 | ||
|
| Автор: tishaishii 17.3.2007, 20:00 |
| Посмотрим Добавлено @ 20:03 Не уже ли, если поменять в реестре 95\98 поменять PATH, то и в autoexec.bat изменится? |
| Автор: tishaishii 18.3.2007, 10:06 |
| В 98м пути HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment не существует. |
| Автор: tishaishii 18.3.2007, 11:48 |
| Короче, раз ни кто ни чего не знает, пришлось самому справляться: [code=perl]use IO::Handle; use Win32; use Win32::Registry; $|=1; sub registryValue { my($path, $rh, $result)=shift; ${'::'.$path}->Open(shift, $rh) && $rh->QueryValueEx(shift, undef, $result); +$result } sub addPath { my($str, $paths, $i)=(shift, shift, shift); $paths->{$_}=++$$i foreach grep /\S/, map{s{^"(.*?)"$}{$1}i;+exists $paths->{+uc} ? uc : $_}split/\s*;\s*/, $str; } sub setPath { my($path, $CRLF, $i)=(shift, "\r\n"); if((&Win32::GetOSVersion)[4]<2) { my$file=(($ENV{WINDIR} || $ENV{WINBOOTDIR})=~m{^([A-Z]:)}i)[0].'\AUTOEXEC.BAT'; open my$fh, '<'.$file;binmode $fh;my@in=<$fh>;close $fh; open my$fh, '>'.$file;binmode $fh; foreach(@in) { if(/^\s*SET\s+PATH\s*=\s*(.*?)\s*$/i) { &addPath($1, $path, \$i) } else { $fh->print(/^\s*(.*?)\s*$/?$1:$_, $CRLF) } } $fh->print('SET PATH=', join(';', map{s{\\?$}{}g;'"'.$_.'"'} sort{$path->{$a}<=>$path->{$b}}keys %$path), $CRLF); close $fh; } else { my($drv, $dir, $node, $rh)=( 'HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'PATH' ); &addPath(®istryValue($drv, $dir, $node), $path, \$i); ${+'::'.$drv}->Open($dir, $rh); $rh->SetValueEx( $node, undef, REG_SZ, join(';', map{s{\\?$}{}g;'"'.$_.'"'}sort{$path->{$a}<=>$path->{$b}}keys %$p |