Главная страница
    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-1260262525
tesseract
2009-12-08 11:55
2010.02.14
Узнай сколько ты должен родной стране (ток РФ) :-)


2-1260997690
Aleks
2009-12-17 00:08
2010.02.14
как загрузить рисунок имеющий расширение .png в компонент Ima


2-1260988667
Дмитрий
2009-12-16 21:37
2010.02.14
Заполнение массива из графика


2-1260986848
Михаил Левшов
2009-12-16 21:07
2010.02.14
Как очистить все окошки редактирования на форме (TEdit)


2-1261037894
JohnKorsh
2009-12-17 11:18
2010.02.14
Ворос по INDY.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский