Как зарегистрировать interop .net asssembly для пользователя без прав администратора с помощью InstallShield - PullRequest
2 голосов
/ 29 сентября 2011

Я работаю над задачей не запрашивать у обычного пользователя всплывающее окно (UAC) для подтверждения установки приложения Windows Addin при регистрации сборки .net во время установки с использованием instalshield.На Windows XP, он работает нормально, но во время установки на Vista и Windows 7, всплывающее окно появляется на утверждение.Согласно требованию, оно не должно прийти.Есть ли способ обойти это всплывающее окно в Vista и Windows 7, если UAC включен и зарегистрировал сборку для пользователя без прав администратора?

Пожалуйста, помогите?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 29 сентября 2011

На самом деле, COM можно зарегистрировать для каждого пользователя или для каждого компьютера, поскольку HKEY_CLASSES_ROOT - это представление, полученное как из HKEY_CURRENT_USER \ Software \ Classes, так и из HKEY_LOCAL_MACHINE \ Software \ Classes.Если вы запустите regasm /regfile:foo.dll, вы можете сгенерировать regfile, а затем изменить все ссылки в именах ключей, чтобы сделать его локальным для текущего пользователя.

В генерируемом файле .reg всеРег ключ добавляется в HKEY_CLASSES_ROOT.Вам нужно заменить их на «HKEY_CURRENT_USER \ Software \ Classes».

Также, если вам нужна регистрация COM для работы с 32-битными приложениями и вы используете x64, то для добавления в HKEY_CLASSES_ROOT \ CLSID вы 'Вам нужно будет вставить "\ Wow6432Node" перед токеном CLSID, например.

Чтобы было ясно, дополнения к "HKEY_CLASSES_ROOT \ CLSID" становятся "HKEY_CURRENT_USER \ Software \ Classes \ Wow6432Node \ CLSID".Чтобы он работал на x86, вам нужно внести это изменение только для записей CLSID.

Кроме того, в некоторых ситуациях вы можете рассмотреть возможность использования регистрации Free COM Interop путем создания файла манифеста для EXE-файла, который используетCOM-сервер, чтобы сделать ProgID / ClassID доступными для EXE без фактической записи регистрационной информации в реестр.

1 голос
/ 29 сентября 2011

Это распространенная ошибка среди разработчиков, которые не знакомы с правами на повышение прав и правами пользователя.

Устанавливаемая вами сборка регистрируется для каждой машины.Вот почему он требует повышения для своего процесса регистрации.Он также повышен на XP, но вы не видите, потому что он автоматический.Если вы запустите установку под учетной записью обычного пользователя, то произойдет сбой из-за недостаточных прав доступа.

Поскольку эта сборка была разработана для регистрации на компьютере, почему вы пытаетесь изменить ее поведение?Это все равно что пытаться модифицировать Windows для поддержки вашего приложения.Вы приспосабливаетесь к окружающей среде, а не наоборот.

Таким образом, правильным решением было бы использование установщика для каждой машины.Таким образом, процесс установки будет установлен для всех пользователей и всегда будет требовать прав администратора.

Установки для отдельных пользователей предназначены для продуктов, которые используют местоположения только для пользователей.Если вы устанавливаете ресурсы в расположении для каждого компьютера, вам следует использовать установку для каждого компьютера.

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