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

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

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

Есть ли способ вызвать.Net код из VBA в этом сценарии, или есть какие-то другие решения?

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

5 ответов

Решение

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

Там в 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,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Удачи.

Другие вопросы по тегам