![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
После выполнения файла 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 - две разные разницы.