ОК, я нашел способ создания сценария установки для ограниченного пользователя, в котором мой 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 для каждого пользователя.