Ограниченные учетные записи Windows
Перенос моей статьи, для истории, из ЖЖ (livejournal.com)
Столкнулся со старой как мир этот проблемой: есть Windows 2000/XP/2003, есть юзверь бесправный абсолютно и работающий на ней.
Есть нужда поставить кой-какие пакеты типа MSXML Parser/MDAC/etc...
В итоге запускаем себе так тихо установку под администратором в фоне (пока юзер работает, не прерывая) и установщики, что естественно, находят "залоченые" компоненты (например, msxml3.dll). Почему ? да потому что на момент старта установки пользователь пассивно активно работает и DLLки "спроецированы" в память.
Как результат этого - установщик пишет в ключик HKLM RunOnceEx список шагов которые нужно выполнить системе после рестарта но до того как юзер увидел свой рабочий стол.
Всё здорово? Конечно! True Microsoft way - если это Администратор залогинится после рестарта машины....а если залогинится туда всё-равно бесправный офисный клерк? То он увидит массу феерических ошибок (сообщений об ошибке регистрации компонентов) и получит нерабочий уже софт....
К сожалению применив силу гугля ничего готового не нашел. Включил силу мысли и налабал на коленке свое решение:
1.после установки софты (любой, которая может что-то в системе регистрить) мы копируем в систему файлик myrunonce.exe и выполняем myrunonce.exe -install. Естественно всё от имени администратора!
2. после этого действия в системе появится сервис, специфический, который при установке прочитает _всё_ что есть в ключе реестра HKLM RunOnceEx и запишет в файл C:\myrunonce.commands. Права на файл будут
3. Сразу после рестарта машины сервис оживет и исполнит все, что в файле сказано. По окончании своей жизни сервис сам себя убьет.
4. Все статусные сообщения пишутся в системный журнал (Event Log) в секцию Applications
5. Приблуда базируется на CNTService классе от Pj Naughter.
Собсно выкладываю ЕХЕшник собранный и проект (VS2003), в случае если интересны будут модификации (например, шифрование файла команд для специфичной конкретной машины).
There are no published comments.
New comment