Форум: "Начинающим";
Текущий архив: 2010.02.14;
Скачать: [xml.tar.bz2];
ВнизПосле выполнения файла 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c