Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

После выполнения файла cmd получить содержание переменных среды


recop ©   (2009-12-12 20:12:00) 

Уважаемые мастера, подскажите, пожалуйста, если сможете:

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

cmd-файл:

If Not Exist "%I386%\Prodspec.ini" (Set Err=Ошибка: в дистрибутиве не найден файл Prodspec.ini.
 GoTo :EOF
)
rem Set I386=C
Find /I "Product=Windows XP " "%I386%\Prodspec.ini" >nul
If Not "!ErrorLevel!"=="0" (
 Set Err=Ошибка: дистрибутив не Windows XP.
 GoTo :EOF
)
Find /I "Localization=Russian" "%I386%\Prodspec.ini" >nul
If Not "!ErrorLevel!"=="0" (
 Set Err=Ошибка: дистрибутив не русский.
 GoTo :EOF
)
If Not Exist "%I386%\SP3.cat" (
 Set Err=Ошибка: дистрибутив без интегрированного SP3.
 GoTo :EOF
)
If Exist "%I386%\NLITE.IN_" (
 Set Err=Ошибка: Дистрибутив модифицирован nLite. Интеграция остановлена.
 GoTo :EOF
)


вызываем из Delphi:


procedure TForm1.Button1Click(Sender: TObject);
var
 I386,err, ss : string;
begin
 Memo1.Clear;
 ss := GetCurrentDir;
 SetEnvVarValue('I386', 'E:\DistrXP\I386');
 SetEnvVarValue('Err', '');                         // Создали для получения

 RunDosInMemo(Edit1.Text,Memo1);

 I386 := GetEnvVarValue('I386');
 err := GetEnvVarValue('Err');

 Memo1.Lines.Add('I386: ' + I386);
 Memo1.Lines.Add('Err: ' + err);    // Здесь получаем пустую строку в любом случае

end;


recop   (2009-12-14 11:31:00) [1]


> MonoLife ©   (14.12.09 03:32) [9]
>
> если переменные среды записываются в реестр, значит потом
> оттуда их можно прочитать



> Slym ©   (14.12.09 11:19) [12]
> добавить в батник
> set >env.txt
> и читать файл или
>
> echo MagicStringDelim
> @set
> echo MagicStringDelim
> и читать из пайпа


По видимости так и сделаю. Спасибо всем за ответы.


Slym   (2009-12-14 11:19:00) [2]

добавить в батник
set >env.txt
и читать файл или

echo MagicStringDelim
@set
echo MagicStringDelim
и читать из пайпа


MonoLife   (2009-12-14 04:52:00) [3]


> Игорь Шевченко ©   (14.12.09 03:51) [10]

разумеется..


Игорь Шевченко   (2009-12-14 03:51:00) [4]


> если переменные среды записываются в реестр, значит потом
> оттуда их можно прочитать


Это если они туда записываются (в особенности из bat (cmd) файла)


MonoLife   (2009-12-14 03:32:00) [5]


> recop ©   (13.12.09 21:16) [7]
..
> Это как?

если переменные среды записываются в реестр, значит потом оттуда их можно прочитать


Leonid Troyanovsky   (2009-12-13 23:26:00) [6]


> recop ©   (12.12.09 20:12)  

>  но новые значения уже из программы не видны.

Запускаемое из cmd, в лучшем случае, будет
дочерним процессом.

Родительский процесс может установить окружение
для дочернего, а обратное, в общем случае, неверно.

В данном же случае, видимо, стоит воспользоваться
к.л. нормальным инсталятором.

--
Regards, LVT.


recop   (2009-12-13 21:16:00) [7]


> Может, прочесть переменную из соответствующей ветки реестра,
>  вместо GetEnvironmentVariable?

Это как?


MonoLife   (2009-12-13 07:54:00) [8]


> recop ©   (12.12.09 23:12) [5]

Может, прочесть переменную из соответствующей ветки реестра, вместо GetEnvironmentVariable?


recop   (2009-12-12 23:12:00) [9]


function GetEnvVarValue(varname: string): string;
var
 buffer: array[0..1024] of char;
 size: integer;
begin
 size := GetEnvironmentVariable(PChar(varname), buffer, sizeof(buffer));
 if size = 0 then
   Result := ''
 else
   Result := string(buffer);
end;


recop   (2009-12-12 23:11:00) [10]

Именно так и пытаюсь


Anatoly Podgoretsky   (2009-12-12 23:01:00) [11]

> recop  (12.12.2009 22:55:02)  [2]

GetEnvironmentVariable


recop   (2009-12-12 22:55:00) [12]

Понятно. Но как это реализовать.

SetEnvVarValue('I386', 'E:\DistrXP\I386');

Delphi gередает в CMD  I386 изменяется (здесь под rem). Но назад, чтобы  получить результат работы CMD способов нет что-ли?


Сергей М.   (2009-12-12 22:28:00) [13]


> новые значения уже из программы не видны


Потому что окружение Windows и окружение DOS - две разные разницы.


Наверх

Титульная страница Поиск, карта сайта Написать письмо