Ответ 1
Я решил это, выполнив regasm
с опцией /regfile
и заменив HKLM на HKCU в результирующем файле .reg
.
Я ограниченный пользователь, и мне нужно написать макрос Outlook, который предоставляет библиотеку С# в Outlook 2003 и 2007.
У меня нет каких-либо администраторских привилегий вообще, даже на время установки, поэтому я не могу запустить RegAsm, и я не могу (я полагаю) написать управляемую надстройку.
Есть ли способ вызвать код .NET из VBA в этом сценарии или какие-либо другие решения?
Это только для личного использования, поэтому уродливый взлом вполне приемлем (пока он работает)
Я решил это, выполнив regasm
с опцией /regfile
и заменив HKLM на HKCU в результирующем файле .reg
.
Регистрация объекта COM (например, элемента управления ActiveX) и его видимость для всех пользователей в системе требует административных прав.
НО, если видимость для всех пользователей не нужна (или не возможна из-за ограниченного ограничения пользователя), COM-объект может быть зарегистрирован только для конкретного пользователя.
Это обычно делается путем регистрации объекта в HKCU вместо HKLM. Это применимо к "регулярным" COM-объектам и тем, которые отображаются через .NET COM Interop.
Другие более мелкозернистые подходы также выходят, уже упомянутый RegFree COM, который обращается к конкретному исполняемому файлу.
Итак, учитывая все вышеизложенное, решение по захвату всей информации в рег файл и замена HKLM на HKCU должно работать (не очень хорошо, но также и инструменты).
Здесь 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 работает, было бы невозможно установить COM-объект (interop или иначе) без прав администратора.
Когда вы регистрируете объекты com, он записывает несколько записей в HKEY_CLASSES_ROOT
, который является ключом на уровне машины и поэтому требует прав администратора.
Теперь, потому что вы сказали, что хакерское решение приемлемо, вот некоторые возможные шаги, которые вы можете предпринять, чтобы заставить его работать; однако, если у вас нет прав администратора, я предполагаю, что это не ваша машина и, скорее всего, рабочая машина. Принять эти меры можно очень хорошо, чтобы вы уволили вас. Стандартная оговорка и многое другое: Я не виноват, если вы идиот, и вы сами подали в суд/уволили/сняли/грабили/и т.д.
Сначала вам нужно выяснить, какие ключи реестра нужно добавить. Убедитесь, что вы делаете это на "чистой" машине, на которой хост не видел ваш компонент раньше (или тот, который, как вы знаете, не имеет ключей reg). Установите программу мониторинга машины для захвата ключей. Здесь - ссылка на статью [несвязанной] MS, где они рекомендуют некоторые приложения, которые делают именно это.
Теперь, когда монитор работает, установите addin. Теперь вы можете получить журнал о том, какие ключи нужно создать. Используя ваш журнал, создайте файлы экспорта реестра.
Теперь вот где это становится сложно. В основном, что вы будете делать, это загрузить машину из образа BartPE и смонтировать реестр и запустить ваши скрипты; однако ключевые пути будут неправильными, поэтому скрипты не будут работать "из коробки".
У MS есть статья TechNet (но ссылка имеет в ней парсеры, поэтому она не играет здесь неплохо), поэтому Google it, это должен быть первый результат.
После того, как вы прочитали эту статью, вы увидите, что реестр машин будет установлен как подраздел HKEY_LOCAL_MACHINE
. Что вам нужно сделать, так это изменить экспорт реестра в соответствии с новым путем. Как только этот шаг будет завершен, вы сможете загрузиться с вашего изображения BartPE, смонтировать реестр, а затем импортировать свои сценарии, отключить улей и перезагрузить компьютер. Предполагая, что вы скопировали файлы на правильный путь, он должен "работать".
Удачи.
Я нашел возможное решение, но у меня еще нет времени попробовать.