Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1260069104
KilkennyCat
2009-12-06 06:11
2010.02.14
Билогический прогресс был бы лучше технического.


2-1260803424
Dimon89
2009-12-14 18:10
2010.02.14
Подключение базы после запуска (ConnectionString)


15-1260435077
uniken1
2009-12-10 11:51
2010.02.14
Получено/Передано байт


2-1260715573
Нагуглить_не_смог
2009-12-13 17:46
2010.02.14
UTF-8 -> ANSI


2-1260872714
Андрей_11
2009-12-15 13:25
2010.02.14
Combobox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский