COM Interop без регазма - PullRequest
       29

COM Interop без регазма

18 голосов
/ 30 августа 2009

Я пользователь с ограниченными правами, и мне нужно написать макрос Outlook, который предоставляет библиотеку C # в Outlook 2003 и 2007.

У меня нет никаких привилегий администратора, даже во время установки, поэтому я не могу запустить RegAsm и не могу (я полагаю) написать управляемую надстройку.

Можно ли в этом сценарии вызывать код .Net из VBA или есть другие решения?

Это только для личного использования, так что безобразный хак вполне приемлем (пока он работает)

Ответы [ 5 ]

16 голосов
/ 23 октября 2009

Я решил эту проблему, запустив regasm с параметром /regfile и заменив HKLM на HKCU в полученном файле .reg.

6 голосов
/ 15 апреля 2014

Существует RegistrationServices.RegisterAssembly .NET API (который, я считаю, используется RegAsm.exe).

Существует также RegOverridePredefKey Win32 API, незаметный, но весьма полезный, который позволяет переназначить HKEY_CLASSES_ROOT (используется RegisterAssembly) на HKEY_CURRENT_USER\Software\Classes.

Умная программа может использовать как RegistrationServices.RegisterAssembly, так и RegOverridePredefKey, чтобы зарегистрировать сборку для COM-клиентов под HKEY_CURRENT_USER.

Я сам не пробовал, но я считаю, что это вполне выполнимо.

Обновлено , по-видимому, этот подход работает .

5 голосов
/ 22 марта 2010

Регистрация COM-объекта (например, элемента управления ActiveX) и сделать его видимым для всех пользователей в системе требует административных прав.

НО, если видимость для всех пользователей не нужна (или невозможна из-за ограниченного пользовательского ограничения), тогда COM-объект может быть зарегистрирован только для конкретного пользователя.

Обычно это делается путем регистрации объекта в HKCU вместо HKLM. Это будет применяться к «обычным» COM-объектам и объектам, доступным через .NET COM Interop.

Другие более мелкозернистые подходы также выходят, уже упомянутый RegFree COM, который обращается к конкретному исполняемому файлу.

Таким образом, с учетом всего вышеперечисленного, решение, позволяющее записать всю информацию в reg-файл и заменить HKLM на HKCU, будет работать (не очень хорошо, но так же как и инструменты).

1 голос
/ 09 сентября 2009

Я нашел возможное решение , но у меня еще нет времени попробовать его.

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

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

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

Теперь, поскольку вы сказали, что хакерское решение приемлемо, вот несколько возможных шагов, которые вы могли бы предпринять, чтобы заставить его работать; однако, если у вас нет прав администратора, я предполагаю, что это не ваша машина, а скорее всего рабочая машина. Эти шаги могут вас уволить. Стандартный отказ от ответственности и еще много чего: я не виноват, если вы идиот и получаете иск / уволены / расстреляны / ограблены / т. Д.

Сначала нужно выяснить, какие ключи реестра нужно добавить. Убедитесь, что вы делаете это на «чистой» машине, на которой хост не видел ваш компонент ранее (или на той, на которой вы знаете, что у нее нет ключей reg). Установите программу мониторинга машины для захвата ключей. Здесь - ссылка на [несвязанную] статью о MS, где они рекомендуют некоторые приложения, которые делают именно это.

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

Теперь вот где это сложно. По сути, вы будете загружать машину из образа BartPE, монтировать реестр и запускать свои скрипты; однако пути к ключам будут неверными, поэтому сценарии не будут работать «из коробки».

У MS есть статья на TechNet (но в ссылке есть парены, так что здесь не очень хорошо), так что Google это, это должен быть первый результат.

После прочтения этой статьи вы увидите, что реестр компьютеров будет подключен как подраздел HKEY_LOCAL_MACHINE. Вам нужно изменить экспорт реестра, чтобы он соответствовал новому пути. Как только этот шаг будет завершен, вы сможете загрузиться с вашего образа BartPE, смонтировать реестр, а затем импортировать ваши сценарии, размонтировать куст и перезагрузить компьютер. Предполагая, что вы скопировали файлы по правильному пути, он «должен» работать.

Удачи.

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