• Главная
  • Карта сайта
Не найдено

Управління автоматичною завантаженням додатків

  1. Каталог автозапуску
  2. Запуск додатків через реєстр
  3. DumpStartups.pl
  4. виконання сценарію
  5. Все під контролем!

Область стану панелі завдань Windows - корисна річ: в ній відображаються значки різних корисних програм типу антивіруса і Windows Update, що працюють у фоновому режимі. Завдяки області стану ми завжди знаємо, які програми виконуються на комп'ютері. Але з часом в області стану з'являється все більше значків. Тут і програми, що стежать за накопичувачами CD-ROM і DVD, і блокування реклами і спливаючих вікон, і управління завантаженням файлів з Internet, і ще багато всього. А адже ще безліч програм працюють у фоновому режимі, і вони ніде не показують свої значки. Область стану панелі завдань Windows - корисна річ: в ній відображаються значки різних корисних програм типу антивіруса і Windows Update, що працюють у фоновому режимі

Було б непогано, якби на комп'ютері виконувалися тільки ті програми, які я сам запускаю вручну, і ті, які я вибрав для автоматичного завантаження і помістив в папку автозапуску. На жаль, деякі програми запускаються без мого відома, оскільки програма установки на свій розсуд додала відповідні розділи до реєстру. Перевірити каталог автозавантаження не складе труднощів, а ось з реєстром справа йде не так просто. Щоб розібратися з самовільним запуском програм, я одного разу написав сценарій на Perl, що дозволяє управляти завантаженням будь-яких додатків при реєстрації користувача.

Каталог автозапуску

Якщо користувачеві необхідно, щоб якийсь додаток завжди запускалося при початку сеансу роботи, він може просто помістити ярлик цієї програми в каталог автозапуску. Якщо адміністратор вважає, що програма має запускатися для кожного користувача, що працює за комп'ютером, він може помістити ярлик в папку автозапуску для кожного користувача або ж в папку завантаження для всіх користувачів. Це може бути будь-який виконуваний файл, пакетне завдання, сценарій (або документ, для якого в системі зареєстрована програма-обробник, така як MS Word для .DOC).

При сеансу роботи користувача Windows виконує запуск всіх програм, поміщених в каталоги автозапуску. Їх список можна переглянути: Пуск / Всі програми / Автозавантаження. У цьому списку містяться ярлики програм, що запускаються для поточного користувача, а також програм із загального каталогу для всіх користувачів даного комп'ютера All Users. Як правило, вміст цих меню відповідає вмісту підкаталогів Головне менюПрограммиАвтозагрузка - каталогу% USERPROFILE% для даного користувача і каталогу% ALLUSERSPROFILE% для всіх користувачів (% USERPROFILE% start menuprogramsstartup і% ALLUSERSPROFILE% start menuprogramsstartup).

Запуск додатків через реєстр

Деякі постачальники воліють запускати свої програми через реєстр. Це робиться з різних міркувань, але, на мій погляд, такий спосіб запуску застосовується в тих випадках, коли розробник хоче приховати програмі запускатися автоматично. Таким способом, до речі, часто запускаються і шпигунські програми.

У реєстрі є кілька розділів, призначених для автоматичного запуску додатків. Список цих розділів міститься в статті «Де знайти програми автоматичного запуску», опублікованій в Windows & .NET Magazine / RE № 2 за 2003 рік ( http://www.osp.ru/win2000/2003/02/096.htm ). Переважна більшість програм використовують розділи Run і RunOnce, кожен з яких існує в двох варіантах - для конкретного користувача і для всіх користувачів. Розділ Run застосовується для запуску додатків на початку кожного сеансу роботи користувача. Розділ RunOnce дозволяє виконати одноразовий запуск програми при реєстрації користувача, після чого програма автоматично видаляється зі списку; таким чином, програма запускається всього один раз. Розділ RunOnсe зазвичай використовується різними програмами установки для запуску програм, які будуть доповнювати процес установки або видалення програми. Для поточного сеансу користувача розділ Run має шлях HKEY_CURRENT_USERSoftwareMicrosoftWindows CurrentVersionRun, розділ RunOnce - HKEY_CURRENT_USERSoftwareMicrosoftWindows CurrentVersionRunOnce. Загальні для всіх користувачів комп'ютера розділи Run і RunOnce розташовані в HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows CurrentVersionRun і HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows CurrentVersionRunOnce.

DumpStartups.pl

Програма DumpStartups.pl допомагає керувати списком додатків, що запускаються на початку сеансу роботи користувача. Цей сценарій задіє для роботи кілька модулів і розширень (безкоштовних), які за умовчанням зазвичай не встановлюються. Список цих модулів і розширень наведено в табл. 1 із зазначенням, звідки їх можна завантажити. На сайті ActiveState ( http://www.activestate.com ) Можна безкоштовно завантажити ActivePerl.

Для економії місця в лістінге1 наведені тільки найбільш важливі фрагменти коду сценарію, в яких відбувається обробка. Повний код сценарію можна отримати на сайті.

У наведеному лістингу 1 в мітці А виконується завантаження бібліотеки Shell32.dll і звернення до функції SHGetFolderPath () для отримання імен каталогів автозавантаження для поточного користувача і для всіх користувачів комп'ютера. При цьому присвоюються значення тих змінних, які знадобляться в подальшому для роботи сценарію.

Сучасні версії Windows (Windows Server 2003, Windows XP, Windows 2000 і, в деяких випадках, Windows NT 4.0) підтримують змінну середовища pathext, визначальну список розширень виконуваних файлів, за винятком .pif і .lnk. Наведений в мітці B фрагмент коду дозволяє сценарієм визначити, чи підтримується в системі змінна середовища pathext. Якщо немає, програма створює власну змінну середовища зі значеннями .bat, .cmd, .com і .vbs. Потім вона формує масив розширень імен файлів і збирає все розширення назад в один рядок з символом «|» (вертикальна лінія) як роздільник. Далі підпрограма використовує отриману рядок в якості регулярного шаблону для визначення того, що ім'я файлу є ім'ям виконуваного модуля.

Фрагмент коду по мітці C визначає запускаються елементи з реєстру і з системного диска. Далі у фрагменті коду по мітці D, в залежності від зазначених в командному рядку параметрів запуску програми, проводиться або виведення списку запускаються на екран, або видалення програм, що запускаються з реєстру.

Наведена у фрагменті по мітці E підпрограма ProcessKey () перераховує всі значення, що зберігаються в зазначеному розділі реєстру, і створює анонімний хеш, що містить значення і пов'язану з ними інформацію. Цей хеш зберігається в масиві @ValueList. Даний масив повертається в зухвалу процедуру в кінці підпрограми.

Підпрограма ProcessDir () виконує для зазначеного каталогу автозавантаження той же, що ProcessKey () для розділів реєстру, - збирає масив імен всіх файлів в зазначеному каталозі і його підкаталогах. Сценарій передає в підпрограму імена каталогів автозавантаження поточного користувача і каталогу All Users. При виявленні ярликів підпрограма визначає властивості ярлика за допомогою виклику розширення Win32 :: Shortcut (мітка F). Далі сценарій визначає опис і ім'я запускається програми. Якщо опис відсутній, сценарій видає ім'я запускається файлу. Якщо підпрограма ProcessDir () виявляє виконуваний файл, проводиться спроба витягти інформацію про фото (фрагмент G). Зрештою підпрограма зберігає зібрані дані в масив @ValueList і повертає його в зухвалу процедуру.

Коли користувач вказує елемент, який слід видалити, сценарій викликає підпрограму Remove (). Ця підпрограма, наведена у фрагменті H, визначає тип програми - розділ реєстру або файл на диску. Якщо елемент є елементом реєстру (тобто параметр розділу), сценарій видаляє цей елемент з реєстру. Якщо елемент є файлом, сценарій видаляє файл з системного диска. Ці операції є незворотними. Видаляються файли і значення реєстру в «Кошик» не потрапляють.

Підпрограма GetSpecialDirectory () повертає шлях до зазначеного каталогу. Наприклад, каталог «Мої документи» може бути розміщений на локальному диску або в загальнодоступному місці на віддаленому сервері. Ця підпрограма визначає точне місцезнаходження каталогу. Наведений в мітці I код отримує значення CSLID. CSLID визначає спеціальні каталоги Windows (такі, як «Мої документи», тимчасові файли Internet). Список значень CSLID можна знайти, наприклад, у файлі shlobj.h з Windows SDK. Підпрограма GetSpecialDirectory () викликає функцію SHGetFolderPath (), що визначає, завантажувався сценарій раніше. Функція GetSpecialDirectory () спочатку виділяє буфер (змінна $ pszPath) для збереження імені каталогу. Що повертається ім'я файлу представлено в кодуванні Unicode. Сценарій очищає отриманий рядок від всіх символів з кодом NUL (x00), перетворюючи її тим самим в формат ANSI.

Таке псевдопреобразованіе з Unicode в ANSI - досить сумнівний трюк. Якщо в назві каталогу присутні символи Unicode (наприклад, російські літери), то видалення символів з кодом NUL дасть неприйнятний результат, і вийшов шлях буде помилковим. Цей трюк застосовується в тому випадку, якщо використовувана версія Perl не підтримує Unicode і рядки UTF-8. Якщо буде потрібно, можна переписати цю процедуру для підтримки рядків Unicode в Perl.

виконання сценарію

Якщо запустити DumpStartups.pl без вказівки параметрів командного рядка, сценарій просто виводить на екран список запускаються елементів з порядковими номерами. Для видалення певного елемента слід знову запустити сценарій з ключем / r і номером видаляється елемента. Так, для видалення елементів під номерами 3 і 8 досить виконати команду

perl DumpStartups.pl / r 3 / r 8

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

Все під контролем!

Зазвичай я пишу сценарії для вирішення завдань, з якими стикаюся щодня. Так і сценарій DumpStartups.pl з'явився в той час, коли я вже з великими труднощами міг розібратися, що і навіщо запускається на моєму комп'ютері. Тепер я запускаю цей сценарій кожен раз при установці нових програм і компонентів.

Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью