Лекції з СПО4
Лабораторна робота 1
Робота зі змінними оточення ОС Windows у прикладних програмах
Робота розрахована на 2 години (1 заняття)
Завдання: написати програму, в якій виводиться список усіх змінних оточення ОС:
подібно до того, як це робить програма з сервісуWindows(Рис 1 – праворуч)


Для пошуку програм, виділення простору пам'яті певним програмам і контролю програм операційна система Windows вимагає певної інформації, яка називається змінними оточення системи (системні змінні) та користувача (локальні змінні).
Системні зміннісередовища задані заздалегідь в операційній системі та доступні для всіх процесів операційної системи Windows. Змінювати та додавати ці змінні можуть лише користувачі з адміністративними обліковими даними (права адміністратора). Ці змінні найчастіше використовуються у сценаріях входу до системи.
Локальні зміннісередовища доступні, тільки коли користувач, для якого вони були створені, увійшов до системи. Локальні змінні дійсні лише для поточного користувача, але визначають поведінку глобального середовища операційної системи.
У наступній таблиці (Таблиця 1.1) наведено список найчастіше використовуваних системних та локальних змінних середовища для операційної системи Windows.
Таблиця 1.1
Змінна
Повертає розміщення профілю додатків, що використовується всіма користувачами.
Повертає розміщення даних програм, що використовується за умовчанням.
Повертає ім'я комп'ютера
Повертає шлях до командної оболонки, що виконуєтьсяcmd.exe
Повертає ім'я диска локальної робочої станції, пов'язаного з основним каталогом користувача. Задається на підставі розташування основного каталогу. Основний каталог користувача вказується в оснастці «Локальні користувачі та групи»
Повертає повний шлях до основного каталогу користувача. Задається на підставі розташування основного каталогу. Основний каталог користувача вказується в оснастці «Локальні користувачі та групи»
Повертає шлях до загального основного каталогу користувача. Задається на підставі розташування основного каталогу. Основний каталог користувача вказується в оснастці «Локальні користувачі та групи»
Повертає ім'я контролера домену, який перевіряв справжність поточної сесії
Задає кількість процесорів, встановлених на комп'ютері
Повертає ім'я операційної системи. Windows 2000 відображає операційну систему як Windows NT
Вказує шлях пошуку для виконуваних файлів
Повертає список розширень файлів, які розглядаються операційною системою як виконувані
Повертає архітектуру процесора. Можливі значення: x86 та IA64 (Itanium)
Повертає опис процесора
Повертає номер моделі процесора, встановленого на комп'ютері
Повертає номер модифікації процесора
Повертає ім'я диска, що містить кореневий каталог операційної системи Windows (тобто системний кореневий каталог)
Повертає розміщення кореневого каталогу операційної системи Windows
Системна та користувальницька
Повертає тимчасові папки, які за промовчанням використовуються програмами, які доступні користувачам, які виконали вхід до системи. Деякі програми потребують змінну TEMP, інші – змінну TMP
Повертає ім'ядомену, що містить список облікових записів користувачів
Повертає ім'я користувача, який виконав вхід до системи
Повертає розташування профілю для поточного користувача
Повертає розміщення каталогу операційної системи
Ці змінні використовуються операційною системою WINDOWS та програмними процесами, що функціонують у системі WINDOWS. Наприклад, збереження тимчасових файлів у момент інсталяції програм (ЗміннаTEMPабоTMP).
Інтерпретатор середовища WINDOWS, наприклад консольcmd.exe,провідникWINDOWS, зустрівши ім'я змінної%ІМ'Я_ЗМІННОЮ%, замінює його значенням цієї змінної. Таким чином, різні програми і сама операційна система використовує одні й самі шляхи для зберігання файлів конфігурації та іншу корисну інформацію необхідну для організації загальних правил поведінки програм і зберігання групованої (конкретне місце зберігання загальної) конфігураційної інформації.
Значення змінної може включати імена раніше оголошених змінних оточення, наприклад %USERPROFILE%\Local Settings\Temp.
Ще одна корисна властивість змінних середовища оточення в тому, що при запуску додатків на виконання, наприклад, за допомогою файлів сценарію *.bat; *.cmd та інших, можна не вказувати весь шлях до файлу. Це досягається використанням змінної%PATH%. Значення цієї змінної зберігає шляхи, розділені один від одного крапкою з комою, якими відбувається пошук програми, яку необхідно запустити на виконання. Ще одна змінна%PATHEXT%вказує на розширення файлів, тих, які будуть запускатися на виконання. Значення цих змінних зберігаються у форматі (наприклад .com), розділені один від одного крапкою з комою. Таким чином, операційна системаWINDOWS шукає шляхи%PATHT%тільки файлів з розширеннями%PATHEXT%. Якщо розширення не було вказано, відбувається пошук на ім'я з додаванням розширень зі змінної%PATHEXT%.На виконання запускається перший знайдений файл, це треба враховувати, якщо існують схожі імена файлів розташовані по шляхах%PATHT%.
Системний реєстр та змінні оточення WINDOWS
Системні змінні оточення операційної системи Windows зберігаються в системному реєстрі шляхом:
Локальні змінні оточення операційної системи Windows зберігаються в системному реєстрі на шляху (для кожного користувача свої):
HKEY_CURRENT_USER\Environment
Читання та зміна змінних оточення при
допомоги функцій Win32® API
Повний список змінних оточення поточного процесу можна прочитати за допомогою функціїGetEnvironmentStrings, оголошений у файліWindows.hтаким чином:
LPSTR GetEnvironmentStrings (VOID);
Ці рядки можна лише прочитати. Змінювати значення змінних за допомогою цих рядків неможливо.
Після того, як інформацію з блоку змінних оточення вилучено, блок треба видалити функцієюFreeEnvironmentStrings:
BOOL FreeEnvironmentStrings (IN LPSTR);
Отримати інформацію про значення якоїсь конкретної змінної оточення можна функцієюGetEnvironmentVariable, яка у файліWinbase.hоголошена так:
DWORD GetEnvironmentVariable (IN LPCSTR lpName,
OUT LPSTR lpBufer,
OUT DWORD nSize);
ТутlpName– покажчик на рядок з ім'ям змінної, аlpBufferтаnSize– буфер та його розмір.
Задати значення змінної оточення або створитинову змінну можна функцією SetEnvironmentVariable, оголошеною у файлі Winbase.h:
BOOL SetEnvironmentVariable
(IN LPCSTR lpName, IN LPCSTR lpValue);
ПараметрlpName– це ім'я змінної, параметрlpValue– значення, що задається. Якщо параметрlpValueдорівнюєNULL, то зміннаlpNameвидаляється зі списку змінних оточення цього процесу. Якщо змінної з ім'ямlpNameнемає, іlpValueне дорівнюєNULL, то створюється змінна із заданим ім'ям та значенням.
Треба враховувати, що функція SetEnvironmentVariable визначає значення змінної тільки для даного процесу. Наприклад, можна змінити значення змінної PATH, ввімкнувши шляхи, потрібні для конкретної програми. Але інші додатки працюватимуть зі своїми значеннями змінних.