A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
pasta / php / autoload.md
- Go to file T
- Go to line L
- Copy path
- Copy permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Cannot retrieve contributors at this time
executable file 275 lines (193 sloc) 28.1 KB
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents Copy raw contents
Copy raw contents
Автозагрузка, неймспейсы и PSR-4
Когда пишут ООП-код, каждый класс помещают в отдельный файл. Класс может использовать какие-то другие классы. В примере ниже класс A ссылается на классы SomeClass и OtherClass . Если класс SomeClass не известен PHP, то на строчке class .. extends . интерпретатор выдаст ошибку. Аналогично, ошибка будет выдана, если мы вызвали метод test() , но PHP в этот момент не знает о классе OtherClass :
ВАЖНАЯ ОЧИСТКА ПАМЯТИ, КОТОРУЮ НУЖНО ДЕЛАТЬ НА ЛЮБОМ ТЕЛЕФОНЕ! Как Удалить Ненужные папки и файлы 🔴
class A extends SomeClass < public function test() < $o = new OtherClass; // . > >
Чтобы код не выдал ошибку, мы должны в начале файла подключить (выполнить) файлы, где описаны классы SomeClass и OtherClass . Выглядит это примерно так:
// встроенная в PHP константа __DIR__ содержит путь к папке с этим файлом require_once __DIR__ . ‘/Some/Class.php’; require_once __DIR__ . ‘/Some/Other/Class.php’; class A extends SomeClass < .
Конструкция require_once выполняет код из указанного в ней файла, если этот файл ранее не подключался. Когда число классов увеличивается, писать все эти require_once становится неудобно. К счастью, в PHP есть решение проблемы — автозагрузка, то есть автоматическая загрузка файла с классом при первом обращении к этому классу.
PHP позволяет тебе зарегистрировать функцию-автозагрузчик с помощью функции spl_autoload_register. Можно зарегистрировать любое число автозагрузчиков. В случае обращения к несуществующему в данный момент классу (о котором PHP ничего не знает), PHP будет вызывать по очереди все зарегистрированные автозагрузчики, передавая им имя класса.
Если автозагрузчик знает, где лежит этот класс, он должен подключить файл с ним, PHP увидит, что класс появился, и продолжит выполнение программы. Иначе PHP вызовет следующий автозагрузчик. Если ни один автозагрузчик не подключит файл с классом, то будет выведена ошибка об обращении к несуществующему классу.
Вот примеры кода, который вызовет срабатывание автозагрузки:
// Будут вызваны все автозагрузчики для загрузки класса A // Если ни один из них не найдет класс, то произойдет ошибка и // выполнение скрипта прервется $a = new A; // Будут вызваны автозагрузчики для загрузки класса B B::someMethod(); // Будут вызваны автозагрузчики для загрузки класса D class C extends D < >// Здесь тоже будут вызваны автозагрузчики для проверки, существует такой // класс или нет, но даже если класс не будет найден, ошибки не произойдет, // просто class_exists вернет false и код внутри if не выполнится if (class_exists(‘E’)) < // ..
Бывает, что упоминание названия класса в коде не вызывает срабатывания автозагрузчиков. Вот пример, который приходит мне в голову:
Как Очистить Память на Телефоне
function test(F $f)
Здесь в тайп-хинте упомянут класс F , но PHP не будет пытаться его загружать, он использует лишь название класса для проверки типа переданного в функцию аргумента.
Автозагрузчиков может быть несколько. Например, если ты подключаешь стороннюю библиотеку, то она может зарегистрировать свой автозагрузчик для загрузки своих классов. Таким образом, каждая библиотека может самостоятельно решать, как она будет искать и подключать файлы.
Функция-автозагрузчик имеет такой вид:
function ($className) < // . >
Она получает от PHP только имя класса. Для того, чтобы по имени класса можно было понять какой файл надо подключить, обычно используют либо заранее подготовленный список соответствия классов и файлов, либо придумывают договоренность, по которой из имени класса можно получить имя файла. Например, файлы называют так же, как и класс, с точностью до регистра букв, и кладут в заранее оговоренную папку: class SomeClass описывается в файле SomeClass.php . Одна из таких договоренностей называется PSR-4, о ней ниже.
- автозагрузчик не должен выдавать ошибку, если он не может найти файл с классом — может быть, этот класс подгрузит следующий автозагрузчик
- пиши автозагрузчик только для своих файлов и не пытайся подгружать классы от сторонних библиотек — они сами об этом позаботятся
- не используй функцию __autoload() , она устарела много лет назад (например, она не позволяет сделать больше одного автозагрузчика)
- в линуксе регистр букв в именах файлов имеет значение
- в PHP уже есть готовая реализация функции-автозагрузчика spl_autoload
- не изобретай свои правила сопоставления имен классов и файлов, а используй общепринятый стандарт PSR-4 (о нем ниже)
- вообще, автозагрузчик не обязан создавать класс именно за счет подключения файла, он может создать класс каким-то другим способом, например: искать код класса в базе данных, скачивать его с гитхаба, генерировать и выполнять с помощью конструкции eval . Но не стоит так делать, так как скорее всего твой код будет медленно работать и в нем потом будет очень сложно разобраться.
spl_autoload_register(function ($class) < // Получаем путь к файлу из имени класса $path = __DIR__ . $class . ‘.php’; // Если в текущей папке есть такой файл, то выполняем код из него if (file_exists($path)) < require_once $path; > // Если файла нет, то ничего не делаем — может быть, класс // загрузит какой-то другой автозагрузчик или может быть, // такого класса нет >);
Подробнее про автозагрузку можно почитать тут:
- мануал: http://php.net/manual/ru/function.spl-autoload-register.php
- http://victor.4devs.io/ru/php/classes-autoload-php.html
- http://habrahabr.ru/post/136761/
Неймспейсы (пространства имен)
Классы можно помещать в так называемые пространства имен (неймспейсы), иначе говоря, полное имя класса может состоять из нескольких частей, которые разделены бекслешем (не путай с прямым слешем / ). Например: в полном названии MegasoftMegacmsSomeClass слово SomeClass — это короткое название класса, а MegasoftMegamcs — это пространство имен, в котором он находится. Уникальным должно быть только полное имя класса, а короткие названия могут совпадать, например: SomeLibraryUser и OtherLibraryUser .
Если в полном названии класса нет пространства имен, то полное название совпадает с коротким и говорят, что класс находится в корневом неймспейсе (например: ExampleClass ).
Неймспейсы, как и имена классов, принято писать с большой буквы.
Пространства имен позволяют записывать длинные имена классов в более удобном виде. Длинные имена появляются в коде по 2 причинам:
-
борьба с конфликтом имен. Представь, что Вася и Маша пишут каждый свою библиотеку и оба решают написать в них класс с одинаковым названием, например User . Или функцию getUser() . Если мы попробуем подключить в проекте обе этих библиотеки, произойдет ошибка, так как нельзя создать два класса с одинаковыми именами. Чтобы избежать таких конфликтов, нужно, чтобы имена классов были уникальными, потому библиотеки обычно приписывают к классам и функциям свое название в начало:
Masha_User mashaGetUser() Vasya_User vasyaGetUser() Zend_Mail sfController
- Zend_Db_Table_Row_Abstract — это класс фреймворка Zend Framework 1, модуль Db, подмодуль Table, подмодуль Row.
- sfDatabaseConfigHandler — класс фреймворка Symfony1, модуль Database, подмодуль Config, класс Handler
Таким образом, разработчики вынуждены делать имена классов длинными. Это неудобно, так как они увеличивают длину строк и ухудшают читаемость кода, но без этого были бы конфликты и путаница.
Неймспейсы решают эту проблему тем, что позволяют составлять длинное имя класса из нескольких частей, но в коде использовать короткий, легко читаемый, синоним. Полные имена классов выглядят так:
SymfonyComponentRoutingRouter DoctrineORMMappingId MashaUser VasyaUser
Однако, писать полное имя в конструкции class X нельзя. Чтобы поместить класс в неймспейс, мы должны указать в начале файла с ним название неймспейса с помощью ключевого слова namespace . Неймспейс задается для всего файла сразу (это не проблема, так как мы обычно описываем в одном файле только один класс), и относится ко всем упомянутым в нем именам классов:
// Задаем пространство имен для этого файла namespace MegaLibraryDatabase; // Указываем в конструкции class короткое имя класса // Этот класс получит полное имя MegaLibraryDatabaseUser class User < >// PHP попытается создать объект класса MegaLibraryDatabaseSomeClass $x = new SomeClass;
Если в этом файле указаны другие имена классов, то PHP припишет название неймспейса перед ними: SomeClass превратится в MegaLibraryDatabaseSomeClass , а название ConnectorDbMysql будет воспринято как указание на класс MegaLibraryDatabaseConnectorDbMysql .
Если мы хотим использовать класс из другого неймспейса, то мы должны либо указать его полное имя, добавив перед ним бекслеш (например $x = new OtherClass(. ) или $y = new Example ), либо задать для него синоним с помощью специальной конструкции use , которая пишется в начале файла. Вот пример конструкции use :
namespace MegaLibraryDatabase; // в этом файле Router — это синоним для длинного имени класса use SymfonyComponentRoutingRouter as Router; $router = new Router();
Эта строчка говорит о том, что далее в коде название Router будет обозначать класс SymfonyComponentRoutingRouter (иногда это еще называют «импортируем класс Router»). Если выбранный синоним совпадает с коротким названием класса, то конструкцию as можно не писать, и код получается еще проще:
namespace MegaLibraryDatabase; use SymfonyComponentRoutingRouter; $router = new Router();
Конструкция use . as позволяет задать произвольный синоним для класса. Эта возможность используется, когда надо подключить классы с одинаковыми короткими именами из разных неймспейсов:
// Объявляем, что имя User будет обозначать класс SomeLibraryUser use SomeLibraryUser; // Объявляем, что имя OtherUser будет обозначать класс OtherUser use OtherUser as OtherUser; $user1 = new User; $user2 = new OtherUser;
Таким образом, благодаря неймспейсам мы можем использовать длинные имена классов, не сильно ухудшая читабельность кода.
Часто неймспейс составляется из названия библиотеки или приложения, к которому добавляется группа или модуль, к которому относится класс. Неймспейс может состоять из произвольного числа частей, но на практике больше 2-3 уровней вложенности (не считая короткого имени) не требуется. Например:
- DrupalCoreCacheMemoryBackend — приложение Drupal, модуль Core, подмодуль Cache, класс MemoryBackend
- SymfonyComponentRoutingRouter — класс Router в фреймворке Symfony, в компоненте роутинга
- HashidsHashids — основной класс Hashids из библиотеки с таким же именем
Также, иногда главный класс может помещаться в корневой нейспейс, и обычно его название совпадает с названием приложения (чтобы гарантировать уникальность имен). Например, в Друпале есть класс Drupal .
Если ты не указываешь в начале файла неймспейс, то твои классы создаются в глобальном, или корневом, неймспейсе (то есть класс SomeClass получает полное имя SomeClass ). Подробнее неймспейсы и правила работы с ними описаны в мануале: http://php.net/manual/ru/language.namespaces.php
Повторим особенности неймспейсов:
- имена неймспейсов принято начинать с большой буквы.
- слова namespace и use пишутся в самом начале файла и действуют только в пределах этого файла. Они не влияют на другие файлы, которые могут вызываться из текущего.
- namespace задает пространство имен для файла.
- use задает короткий синоним для длинного имени класса.
- в коде можно использовать полные имена классов, но перед ними надо поставить дополнительный бекслеш, чтобы указать, что к ним не надо приписывать текущий неймспейс.
- ради читаемости после слов namespace и группы слов use оставляют одну пустую строчку
- слово use не вызывает срабатывания автозагрузки и даже не проверяет, существует ли указанный в нем класс. Эта конструкция просто задает короткий синоним для длинного имени класса.
Современные IDE (вроде PhpStorm, Eclipse PDT или Netbeans) умеют вставлять в файл строку use автоматически при использовании короткого имени класса. Не требуется писать ее руками. Некоторые IDE также умеют автоматически вставлять строку namespace , определяя неймспейс по папкам, в которых хранится файл.
Хотя это редко используется, но функции и константы так же могут помещаться в неймспейсы и иметь длинные имена. Начиная с PHP5.6, их стало можно импортировать (создавать короткие синонимы) с помощью конструкций use function NamespacefunctionName и use const NamespaceCONSTANT . Подробности описаны в официальном мануале PHP.
Некоторые утверждают, что переход на неймспейсы ничем не улучшает код: мы просто пишем use в начале файла вместо require_once . Но разница есть: мы можем использовать в коде более короткие названия классов, также мы убираем из кода информацию о том, в каком файле описан тот или иной класс.
Когда ты пишешь автозагрузчик, нужны какие-то правила, чтобы определить по полному имени класса путь к файлу с ним. Желательно, чтобы правила были общие, чтобы каждый разработчик не придумывал свой велосипед.
Эту проблему (как назвать файл с классом) решает рекомендация PSR-4 (англ). Она советует называть файл, взяв краткое название класса (с учетом регистра букв) и добавив к нему расширение .php . Этот файл кладется в вложенные друг в друга папки, имена которых совпадают с частями неймспейса. Например, класс
нужно поместить по пути
Если проект хранится в папке c:/projects/mega , и внутри нее мы создали для кода папку src , то полный путь к файлу получается c:/projects/mega/src/MegaBlog/A/B/SomeClass.php . Некоторые не используют папку src , и кладут папку MegaBlog сразу в корень проекта (в c:/projects/mega ).
Если в проекте все имена классов начинаются одинаково (например, они начинаются с MegaBlogA. ), то мы можем договориться не создавать для этих частей папки и положить класс MegaBlogABSomeClass в c:/projects/mylib/src/B/SomeClass.php .
Сам PHP не требует чтобы имя класса совпадало с именем файла, а имя неймспейсов — с именами папок. Ему не важно, где хранится класс. PSR-4 это лишь договоренность, чтобы все использовали общий стандарт.
Обычно в качестве неймспейса верхнего уровня выбирают название приложения, иногда вместе с названием компании или ником разработчика (например в фреймворке Symfony все классы лежат внутри неймспейса Symfony ). Если приложение маленькое, то все классы можно сложить в один неймспейс, а по мере роста добавляются дополнительные уровни вложенности и получится что-то вроде SymfonyComponentHttpFoundationRequest .
Если ты придерживаешься этого стандарта, то во-первых, ты молодец, во-вторых, ты можешь не писать свой автозагрузчик, а взять любой готовый автозагрузчик PSR-4 (например, встроенный в менеджер пакетов composer, который используется для установки сторонних библиотек и может заодно генерировать автозагрузчик). Единственное, что тебе надо указать — это корневой неймспейс твоего проекта и корневую папку. Вот пример кода, который надо вписать в файл конфигурации composer.json , чтобы сказать, что классы из неймспейса MegaBlogCore находятся в папке src , а классы из MegaPlugins надо искать в plugins :
< «autoload»: < «psr-4»: < «MegaBlog\Core\»: «src/», «MegaPlugins\»: «plugins/» > > >
Обрати внимание, что регистр тут имеет значение! Если ты напишешь PSR-4 вместо psr-4 , то composer просто тихо проигнорирует указанную тобой настройку, а ты будешь долго искать, в чем же проблема.
2. Загрузка программ
Рассмотрим процедуру загрузки программы в оперативную память компьютера. Предположим, что программа была заранее собрана в некий единый самодостаточный объект, называемый загрузочным илизагружаемым модулем. В ряде ОС программа собирается в момент загрузки из большого числа отдельных модулей, содержащих ссылки друг на друга.
Результат загрузки программы в память называетсяпроцессом или, если нам надо отличать загруженную программу от процесса её исполнения,образом процесса. К образу процесса иногда причисляют не только код и данные процесса (подвергнутые преобразованию, как в процессе загрузки, так и в процессе работы программы), но и системные структуры данных, связанные с этим процессом. В системах с виртуальной памятью каждому процессу обычно выделяется свое адресное пространство. Впрочем, во многих системах значительная часть адресных пространств разных процессов перекрывается – это используется для реализации разделяемого кода и данных.
В рамках одного процесса может исполняться один или несколько потоковилинитей управления.
Некоторые системы предоставляют и более крупные структурные единицы, чем процесс. Например, в системах семейства Unixсуществуют группы процессов, которые используются для реализации логического объединения процессов взадания (job).Ряд систем имеют также понятиесессии — совокупности всех заданий, который пользователь запустил в рамках одного сеанса работы. Впрочем, соответствующие концепции часто плохо определены, а их смысл сильно меняется от одной ОС к другой.
2.1 Абсолютная загрузка
Первый, самый простой, вариант загрузки состоит в том, что программ загружается с одного и того же адреса. Это возможно в следующих случаях.
- Система может предоставить каждому процессу своё адресное пространство. Это возможно только на процессорах, осуществляющих трансляцию виртуального адреса в физический.
- Система может исполнять в каждый момент времени только один процесс. Загрузочный файл, используемый при таком способе загрузки, называется абсолютным загрузочным модулем.
- Относительная загрузка
Источник: studfile.net
Автозагрузка в Windows XP
Способы автозагрузки и отключение списков автозагрузки:
в реестре автозагрузка представлена в нескольких местах:
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun] — программы, которые запускаются при входе в систему. Данный раздел отвечает за запуск программ для всех пользователей системы.
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunOnce] — программы, которые запускаются только один раз при входе пользователя в систему. После этого ключи программ автоматически удаляются из данного раздела реестра. Данный раздел отвечает за запуск программ для всех пользователей системы.
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunOnceEx] — программы, которые запускаются только один раз, когда загружается система. Этот раздел используется при инсталляции программ, например для запуска настроечных модулей. После этого ключи программ автоматически удаляются из данного раздела реестра. Данный раздел отвечает за запуск программ для всех пользователей системы.
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun] — программы, которые запускаются при входе текущего пользователя в систему
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunOnce] — программы, которые запускаются только один раз при входе текущего пользователя в систему. После этого ключи программ автоматически удаляются из данного раздела реестра.
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunServices] — программы, которые загружаются при старте системы до входа пользователя в Windows.
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunServicesOnce] — программы отсюда загружаются только один раз, когда загружается система.
Например, чтобы автоматически запускать Блокнот при входе текущего пользователя, открываем Редактор реестра (regedit.exe), переходим в раздел [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun] и добавляем следующий ключ:
«NOTEPAD.EXE»=»C:WINDOWS\System32notepad.exe»
Использование групповой политики для автозапуска:
— Откройте оснастку «Групповая политика» (gpedit.msc), перейдите на вкладку «Конфигурация компьютера — Административные шаблоны — Система». В правой части оснастки перейдите на пункт «Запускать указанные программы при входе в систему». По умолчанию эта политика не задана, но вы можете добавить туда программу: включаем политику, нажимаем кнопку «Показать — Добавить», указываем путь к программе, при этом если запускаемая программа находится в папке ..WINDOWSSystem32 то можно указать только название программы, иначе придется указать полный путь к программе. При этом в системном реестре в разделе
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionpolicies] создается подраздел ExplorerRun с ключами добавленных программ. Пример:
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionpoliciesExplorerRun]
«1»=»notepad.exe»
«2»=»iexplore.exe»
В итоге получаем запуск Блокнота и Internet Explorer для всех пользователей. Аналогично задается автозапуск для текущих пользователей, в оснастке «Групповая политика» это путь «Конфигурация пользователя — Административные шаблоны — Система», а в реестре раздел
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerRun]
При этом программы из этого списка не отображаются в списке программ доступных для отключения в msconfig.exe, а также определяются не всеми менеджерами автозагрузки.
Автозапуск из особого списка
— Программы могут запускаться и из следующего раздела реестра:
[HKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionWindows]
«load»=»programma» — программы запускаемые до входа пользователя в систему:
«run»=»programma» — программы запускаемые после входа пользователя в систему.
Эти параметры — аналог автозагрузки из Win.ini в Windows 9х. Пример: запускаем Internet Explorer до входа пользователя в систему и Блокнот после входа пользователя в систему:
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWindows]
«load»=»iexplore.exe»
«run»=»notepad.exe»
Не обрабатывать список автозапуска для старых версий
— Настраивается с помощью групповой политики: «Конфигурация компьютера — Административные шаблоны — Система — Не обрабатывать список автозапуска для старых версий», если эту политику включить, то не будут запускаться программы из следующих разделов реестра:
[HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun]
При использовании этой политики в реестре создается следующий ключ:
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionpoliciesExplorer]
«DisableLocalMachineRun»=dword:00000001
Аналогично устанавливается политика для текущих пользователей: «Конфигурация пользователя — Административные шаблоны — Система — Не обрабатывать список автозапуска для старых версий» с тем отличием что в реестре эта опция включается в ином месте:
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer]
«DisableLocalUserRun»=dword:00000001
Игнорировать списки автозагрузки программ выполняемых однажды
— Настраивается с помощью групповой политики: «Конфигурация компьютера — Административные шаблоны — Система — Не обрабатывать список автозапуска программ, выполняемых однажды», если эту политику включить, то не будут запускаться программы запускаемые из списка
[HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunOnce]
Если эта политика включена, в реестре создается следующий ключ:
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionpoliciesExplorer]
«DisableLocalMachineRunOnce»=dword:00000001
Так же настраивается политика для текущих пользователей: «Конфигурация пользователя — Административные шаблоны — Система — Не обрабатывать список автозапуска программ, выполняемых однажды» Параметры реестра:
[HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionpoliciesExplorer]
«DisableLocalUserRunOnce»=dword:00000001
Назначенные задания
— программы могут запускаться с помощью «Мастера планирования заданий». Посмотреть список установленных заданий, а также добавить новое можно так: «Пуск — Все программы — Стандартные — Служебные — Назначенные задания» — при этом откроется папка ..WINDOWSTasks, в которой отображены назначенные задания. Чтобы добавить новое задание, нужно дважды щелкнуть левой кнопкой мыши по значку «Добавить задание». Запуск программ с помощью этого мастера возможен однократно, при входе в Windows, при включении компьютера, а также по расписанию.
Папка «Автозагрузка»
— это папка, в которой хранятся ярлыки для программ запускаемых после входа пользователя в систему. Ярлыки в эту папку могут добавляться программами при их установке или пользователем самостоятельно. Существует две папки — общая для всех пользователей и индивидуальная для текущего пользователя. По умолчанию эти папки находятся здесь:
..Documents and SettingsAll UsersГлавное менюПрограммыАвтозагрузка — это папка, программы из которой будут запускаться для всех пользователей компьютера.
..Documents and SettingsUsernameГлавное менюПрограммыАвтозагрузка — это папка, программы из которой будут запускаться для текущего пользователя (здесь он назван Username).
Посмотреть какие программы у вас запускаются таким способом можно открыв меню «Пуск — Все программы — Автозагрузка». Если вы создадите в этой папке ярлык для какой-нибудь программы, она будет запускаться автоматически после входа пользователя в систему. Если при входе пользователя в систему удерживать нажатой клавишу «Shift», то программы из папок «Автозагрузка» запускаться не будут.
Смена папки автозагрузки
— Windows считывает данные о пути к папке «Автозагрузка» из реестра. Этот путь прописан в следующих разделах:
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerUser Shell Folders]
«Common Startup»=»%ALLUSERSPROFILE%Главное менюПрограммыАвтозагрузка» — для всех пользователей системы.
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerUser Shell Folders]
«Startup»=»%USERPROFILE%Главное менюПрограммыАвтозагрузка» — для текущего пользователя.
Сменив путь к папке мы получим автозагрузку всех программ из указанной папки. Например:
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerUser Shell Folders]
«Startup»=»c:mystartup» — система загрузит все программы, ярлыки которых находятся в папке c:mystartup, при этом папка «Автозагрузка» все так же будет отображаться в меню «Пуск», а если у пользователя в ней ничего не было, то он и не заметит подмены.
Подмена ярлыка для программы из списка автозагрузки
— допустим у вас установлен русскоязычный пакет Microsoft Office. Тогда в папке «Автозагрузка» у вас будет находиться ярлык «Быстрый запуск Microsoft Office» — этот ярлык устанавливается туда по умолчанию. Но вовсе необязательно этот ярлык ссылается именно на «Быстрый запуск Microsoft Office» — вместо него может быть запущена любая другая программа, тем более что на функциональности Office это не скажется.
Добавление программы к программе запускаемой из списка автозагрузки
— модификация предыдущего варианта — одновременно с загрузкой какой-либо программы из списка автозагрузки у вас будет стартовать другая программа — дело в том, что можно «склеить» два исполняемых файла в один и они будут запускаться одновременно. Существуют программы для такой «склейки». Или ярлык может ссылаться на командный файл, из которого и будут запускаться как оригинальная программа из списка, так и добавленные посторонние программы.
Посмотреть список автоматически загружаемых программ можно открыв программу «Сведения о системе» (откройте «Пуск — Все программы — Стандартные — Служебные — Сведения о системе» или наберите msinfo32.exe в командной строке) и перейдя в пункт «Программная среда — Автоматически загружаемые программы». Программа «Свойства системы» отображает группы автозагрузки из реестра и папок «Автозагрузка».
Другая программа, позволяющая посмотреть список программ автозагрузки — «Настройка системы» (для запуска наберите msconfig.exe из командной строки). Эта программа кроме просмотра списка автозагрузки предоставляет возможность отключения всех пунктов автозагрузки (вкладка «Общие») или выборочных программ (вкладка «Автозагрузка»).
Существует множество менеджеров автозагрузки от сторонних разработчиков. Один из таких менеджеров — Startup Extractor . Он автоматически сканирует папки автозагрузки, системный реестр, и отображает все найденные программы и файлы в виде списка.
Если какая-то программа будет добавлена в список автозагрузки, Startup Extractor сообщит вам об этом и предложит либо оставить эту программу в списке либо удалить ее. При удалении программы из списка Starup Extractor может восстановить ее. Также вы сможете добавлять программы, редактировать параметры программ, сохранять список автозагрузки и многое другое. Программа имеет русский интерфейс, бесплатна, не требует установки.
Еще есть хорошая программа Correct Startup — это менеджер автозапуска Windows. Обеспечивает быструю работу. Удобный пользовательский интерфейс. Читает данные из реестра, папки автозапуска, системного файла.
Примечание :
Приведенная информация приведена в справочных целях. Вся информация, приведенная выше, относится в первую очередь к опытным пользователям, способным восстановить систему после ошибочных изменений в реестре. Если вы не уверены, что в случае ошибочных действий сможете восстановить систему, не используйте приведенную информацию в практических целях, ошибочные действия при внесении изменений в реестр могут серьезно повредить систему и даже привести к переустановке системы. Начинающие пользователи для добавления программ в список автозагрузки должны использовать только папку «Автозагрузка» или «Мастер назначенных заданий».
Оцените статью: Голосов
Источник: www.winblog.ru