На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Changing Environment Variables



Each process has an environment block associated with it. The environment block consists of a null-terminated block of null-terminated strings (meaning there are two null bytes at the end of the block), where each string is in the form:

name=value


All strings in the environment block must be sorted alphabetically by name. Because the equal sign is a separator, it must not be used in the name of an environment variable.
By default, a child process inherits a copy of the environment block of the parent process. The following example demonstrates how to create a new environment block to pass to a child process.

LPTSTR lpszCurrentVariable;
BOOL fSuccess;

// Copy environment strings into an environment block.

lpszCurrentVariable = tchNewEnv;
if (lstrcpy(lpszCurrentVariable, "OperatingSystem=Windows") == NULL)
ErrorExit("lstrcpy failed");

lpszCurrentVariable += lstrlen(lpszCurrentVariable) + 1;
if (lstrcpy(lpszCurrentVariable, "API=Win32") == NULL)
ErrorExit("lstrcpy failed");

// Terminate the block with a NULL byte.

lpszCurrentVariable += lstrlen(lpszCurrentVariable) + 1;

*lpszCurrentVariable = '\0';

// Create the child process, specifying a new environment block.

fSuccess = CreateProcess(NULL, "childenv", NULL, NULL, TRUE, 0,
(LPVOID) tchNewEnv, // new environment block
NULL, &siStartInfo, &piProcInfo);

if (! fSuccess)
ErrorExit("CreateProcess failed");


If you want the child process to inherit most of the parent's environment with only a few changes, save the current values, make changes for the child process to inherit, create the child process, and then restore the saved values, as shown following.

LPTSTR lpszOldValue;
TCHAR tchBuf[BUFSIZE];
BOOL fSuccess;

// lpszOldValue gets current value of "varname", or NULL if "varname"
// environment variable does not exist. Set "varname" to new value,
// create child process, then use SetEnvironmentVariable to restore
// original value of "varname". If lpszOldValue is NULL, the "varname"
// variable will be deleted.

lpszOldValue = ((GetEnvironmentVariable("varname",
tchBuf, BUFSIZE) > 0) ? tchBuf : NULL);


// Set a value for the child process to inherit.

if (! SetEnvironmentVariable("varname", "newvalue"))
ErrorExit("SetEnvironmentVariable failed");

// Create a child process.

fSuccess = CreateProcess(NULL, "childenv", NULL, NULL, TRUE, 0,
NULL, // inherit parent's environment
NULL, &siStartInfo, &piProcInfo);
if (! fSuccess)
ErrorExit("CreateProcess failed");

// Restore the parent's environment.

if (! SetEnvironmentVariable("varname", lpszOldValue))

ErrorExit("SetEnvironmentVariable failed");


The following example, taken from a console process, prints the contents of the process's environment block.

LPTSTR lpszVariable;
LPVOID lpvEnv;

// Get a pointer to the environment block.

lpvEnv = GetEnvironmentStrings();

// Variable strings are separated by NULL byte, and the block is
// terminated by a NULL byte.

for (lpszVariable = (LPTSTR) lpvEnv; *lpszVariable; lpszVariable++)
{
while (*lpszVariable)
putchar(*lpszVariable++);
putchar('\n');
}



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Изменение Переменных Среды



Каждый процесс имеет блока среды связывал с ним. Блок среды состоит из недействительный расторгнутого блока недействительный расторгнутых строк (значение есть два недействительных байта в конце блока), где каждая строка - в форме:

name=value


Все строки в блоке среды должны сортироваться в алфавитном порядке по имени. Поскольку знак равенства является разделителем, он не должен использован от имени переменной среды.
По умолчанию, процесс ребенка наследует копию блока среды родительского процесса. Следующий пример демонстрирует как, чтобы создавать нового блока среды, чтобы проходить в процесс ребенка.

LPTSTR lpszCurrentVariable;
BOOL fSuccess;

// Строки среды Копии в блока среды.

lpszCurrentVariable = tchNewEnv;
если (lstrcpy(lpszCurrentVariable, "OperatingSystem=Windows") == НЕДЕЙСТВИТЕЛЬНЫЙ) ErrorExit("lstrcpy терпел бы неудачу");

lpszCurrentVariable += lstrlen(lpszCurrentVariable) + 1;
если (lstrcpy(lpszCurrentVariable, "API=Win32") == НЕДЕЙСТВИТЕЛЬНЫЙ) ErrorExit("lstrcpy терпел бы неудачу");

// Завершите блока с НЕДЕЙСТВИТЕЛЬНЫМ байтом.

lpszCurrentVariable += lstrlen(lpszCurrentVariable) + 1;

*lpszCurrentVariable = '\0;

// Создайте процесс ребенка, определения нового блока среды.

fSuccess = CreateProcess(НЕДЕЙСТВИТЕЛЬНЫЙ, "childenv", НЕДЕЙСТВИТЕЛЬНЫЙ, НЕДЕЙСТВИТЕЛЬНЫЙ, ИСТИНЫЙ, 0, (LPVOID) tchNewEnv, // новая среда блочная НЕДЕЙСТВИТЕЛЬНАЯ, &siStartInfo, &piProcInfo);

если (! fSuccess) ErrorExit("CreateProcess Потерпевший неудачу");


Если Вы хотите, чтобы процесс ребенка наследовал наиболее родительский среда с только несколькими изменениями, сохраните текущие величины, сделайте заменяет процесс ребенка, чтобы наследоваться, создайте процесс ребенка, и тогда восстановите сохраненные величины, как показано следующее.

LPTSTR lpszOldValue;
TCHAR tchBuf[BUFSIZE];
BOOL fSuccess;

// lpszOldValue ПОЛУЧАЕТ текущую величину "varname", или НЕДЕЙСТВИТЕЛЬНЫЙ если "varname" // переменная среды не существует. Установите "varname" в новую величину, // создавать процесс ребенка затем использовать SetEnvironmentVariable, чтобы восстанавливать // оригинальную величину "varname". Если lpszOldValue НЕДЕЙСТВИТЕЛЕН, "varname" // переменная будет удалена.

lpszOldValue = ((GetEnvironmentVariable("varname", tchBuf, BUFSIZE) > 0)? tchBuf : НЕДЕЙСТВИТЕЛЬНЫЙ);


// Установленный величина для процесса ребенка, чтобы наследоваться.

если (! SetEnvironmentVariable("varname", "newvalue")) ErrorExit("SetEnvironmentVariable ПОТЕРПЕВШИЙ неудачу");

// Создайте процесс ребенка.

fSuccess = CreateProcess(НЕДЕЙСТВИТЕЛЬНЫЙ, "childenv", НЕДЕЙСТВИТЕЛЬНЫЙ, НЕДЕЙСТВИТЕЛЬНЫЙ, ИСТИНЫЙ, 0, НЕДЕЙСТВИТЕЛЬНЫЙ, // наследовать родительскую среду НЕДЕЙСТВИТЕЛЬНУЮ, &siStartInfo, &piProcInfo);
если (! fSuccess) ErrorExit("CreateProcess Потерпевший неудачу");

// Восстановление родительская среда.

если (! SetEnvironmentVariable("varname", lpszOldValue))

ErrorExit("SetEnvironmentVariable ПОТЕРПЕВШИЙ неудачу");


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

LPTSTR lpszVariable;
LPVOID lpvEnv;

// Получите указатель блоку среды.

lpvEnv = GetEnvironmentStrings();

// Строки Переменной разделены НЕДЕЙСТВИТЕЛЬНЫМ байтом, и блок - // завершенное НЕДЕЙСТВИТЕЛЬНЫМ байтом.

для (lpszVariable = (LPTSTR) lpvEnv; *lpszVariable; lpszVariable++)
{
пока (*lpszVariable) putchar(*lpszVariable++);
putchar('\n');
}



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz