Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.02.14;
Скачать: CL | DM;

Вниз

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

 
recop ©   (2009-12-12 20:12) [0]

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

Необходимо выполнить 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;


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


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


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


 
recop ©   (2009-12-12 22:55) [2]

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

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

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


 
Anatoly Podgoretsky ©   (2009-12-12 23:01) [3]

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

GetEnvironmentVariable


 
recop ©   (2009-12-12 23:11) [4]

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


 
recop ©   (2009-12-12 23:12) [5]


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;


 
MonoLife ©   (2009-12-13 07:54) [6]


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

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


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


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

Это как?


 
Leonid Troyanovsky ©   (2009-12-13 23:26) [8]


> recop ©   (12.12.09 20:12)  

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

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

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

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

--
Regards, LVT.


 
MonoLife ©   (2009-12-14 03:32) [9]


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

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


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


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


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


 
MonoLife ©   (2009-12-14 04:52) [11]


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

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


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

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

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


 
recop ©   (2009-12-14 11:31) [13]


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



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


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



Страницы: 1 вся ветка

Текущий архив: 2010.02.14;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
15-1260048619
Юрий
2009-12-06 00:30
2010.02.14
С днем рождения ! 6 декабря 2009 воскресенье


2-1260793787
Б
2009-12-14 15:29
2010.02.14
Тангенс в в Pascal e


15-1260314636
М. Береговой
2009-12-09 02:23
2010.02.14
А затопят ли, когда растают?


15-1260214111
Маркер Бабуина
2009-12-07 22:28
2010.02.14
гатский фонт


15-1260382113
@!!ex
2009-12-09 21:08
2010.02.14
Подскажите советское кино с танцами.