Ограниченная установка Windows - PullRequest
       9

Ограниченная установка Windows

3 голосов
/ 17 сентября 2009

У меня есть приложение Win32, которое включает в себя EXE, элемент управления ActiveX (DLL) и COM-сервер (EXE), и я использую Inno Setup 5 для сборки моего установщика. Многие из наших клиентов используют ограниченные учетные записи пользователей, где у пользователя нет прав администратора, и поскольку компоненты COM должны быть зарегистрированы (что записывает в HKEY_CLASSES_ROOT), мой установочный файл должен запускаться с повышенными привилегиями (admin). Я думаю, что это неизбежно (к сожалению, я не могу использовать COM без регистрации из-за имеющегося у меня сервера EXE COM). Однако я хотел бы создать установщик обновлений, который можно запускать как пользователь с ограниченными правами, и мне нужен совет.

Я думаю следующее:

  • При первоначальной настройке (первоначальная установка) приложение устанавливается в% ALLUSERSPROFILE% \ Application Data \ CompanyName \ AppName вместо% PROGRAMFILES%. Компоненты COM зарегистрированы как нормальные (так как они уже не существуют).
  • Последующие обновления (с использованием другого сценария установки Inno) просто скопируют новые файлы в% ALLUSERSPROFILE% \ Application Data \ CompanyName \ AppName. Надеемся, что даже пользователь с ограниченными правами будет иметь доступ для записи в эту папку, а поскольку компоненты COM уже зарегистрированы, доступ администратора не потребуется.

Это будет означать, что мои клиенты смогут обновиться до последней и самой лучшей версии без хлопот с использованием учетной записи администратора. Это приемлемо или это может укусить меня за спину? Я почти уверен, что Google Chrome делает что-то похожее, но поскольку в нем нет COM-компонентов (насколько я могу судить), даже для начальной настройки может быть пользователь с ограниченными правами.

Любой совет от других, кто сталкивался с этой проблемой, был бы очень кстати.

Ответы [ 4 ]

4 голосов
/ 21 сентября 2009

ОК, я нашел способ создания сценария установки для ограниченного пользователя, в котором мой COM-сервер и COM-объекты регистрируются для каждого пользователя.

Я использую последнюю версию ATL (v9), поставляемую с MSVC 2008, для создания моего COM-сервера и COM-объектов. Оказывается, вы можете зарегистрировать COM-сервер для каждого пользователя с помощью нового переключателя /RegServerPerUser. Я проверил это с ограниченными учетными записями пользователей в XP, Vista и Windows 7, и он отлично работает.

Далее, COM контролирует. Опять ATL9 на помощь. Вы можете зарегистрировать элемент управления для каждого пользователя, убедившись, что RegSvr32 вызывает функцию DllInstall вашего элемента управления, передавая ему параметр командной строки user. Итак, чтобы зарегистрировать элемент управления таким образом, вы просто делаете:

regsvr32.exe /i:user /n MyControl.DLL

Опять же, я проверил это на XP, Vista и Windows 7, и он отлично работает.

Затем я внес следующие изменения в мой скрипт Inno Setup:

  • Папка установки по умолчанию будет {pf} (т.е. C: \ Program Files), если у пользователя есть права администратора. Если нет, то по умолчанию это {commonappdata} (то есть C: \ Documents and Settings \ All Users).
  • Зарегистрируйте мой COM-сервер, используя новый переключатель /RegServerPerUser.
  • Я удалил флаги regserver из своих COM-объектов и вместо этого добавил поддержку вызова regsvr32 с помощью нового переключателя 'user'.

Все эти изменения легко выполнить с помощью функции Inno Setup {code}.

Спасибо Ким за то, что он указал мне путь установки COM для каждого пользователя.

2 голосов
/ 17 сентября 2009

Не знаю точно, но, похоже, я помню, что COM-серверы поддерживают установку для каждого пользователя, и, возможно, это касается и серверов EXE.

Если это так, измените свой регистрационный код, чтобы записать информацию на HKEY_CURRENT_USER\Software\Classes вместо HKEY_CLASSES_ROOT.

Инфраструктура COM должна выполнять поиск сначала для каждого пользователя, а затем для каждого компьютера.

Эксперимент все равно стоит.

0 голосов
/ 31 октября 2011

Вам необходимо переосмыслить свой подход ... доступ на запись в папку, который также может позволить выполнение программы одним и тем же пользователем, является причиной 99% всех функций вирусов и вредоносных программ. Пожалуйста, узнайте немного о политике ограниченного использования программ и новом поведении App Locker, встроенном в Windows 7, чтобы вычислительная инфраструктура могла двигаться вперед, а не назад.

0 голосов
/ 17 сентября 2009

Если вы сбросили inno-setup и использовали MSI - файлы MSI поддерживают идею установки пользователем патчей с ограниченным доступом. Администратор должен авторизовать первоначальную установку, после чего цифровые подписи в MSI-файлах исправлений обрабатываются сервисом MSI с повышенными правами без повышения прав пользователя.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...