Призывая Regasm без административных прав для Com Interop в Excel VBA

StackOverflow https://stackoverflow.com//questions/23063552

Вопрос

Обходной путь для вызова REGOM без права администратора был описан здесь:

com Interop без revasm

Я пытаюсь создать COM-библиотеку, которую мои пользователи могут развернуть и использовать из Excel VBA без привилегий Admin. Мне понравилась обходной путь в ответ, так как кажется, что у людей не имеет большого успеха с использованием без регистрации COM-объектов из Excel VBA. Я также хочу раннее связывание, чтобы мои пользователи могли извлечь выгоду из завершенности синтаксиса.

Принятый ответ в вопросе, упомянутой выше, однако не описывает, где поставить монтаж DLL на компьютер пользователя. Права администратора необходимы для установки сборки в GAC, поэтому я задаюсь вопросом, где можно поставить файл DLL. Я предполагаю, что дир приложения ищет любые ссылочные DLL, но я не могу поставить мою DLL в Dir Excel без права администратора. Можно ли использовать обходной путь с клиентом Excel? Есть ли другой способ позвонить в COM объекты от VBA без необходимости привилегий администратора, чтобы сначала развернуть их?

Это было полезно?

Решение

Призывая Регион без административных прав для COM Interop

Я думаю, что следует использовать RegistrationServices.RegisterAssembly и RegOverridePredefKey API вместе, чтобы реализовать автоматическую регистрацию под улей HKCU, в UAC-дружественнице.Я разместил более подробный ответ здесь .

Другие советы

Да, теперь у вас есть две проблемы, вы не можете поставить его нигде Должен поставить его, как GAC или C: \ Program Files подкаталог. Поскольку эти места также требуют высоты UAC. Вы, вероятно, также забыли запустить Regasm.exe с опцией / codebase / codebase, необходимой для того, чтобы сказать CLR, где искать файл.

Пользователь должен иметь достаточно привилегий для копирования DLL в каталог, к которому он имеет доступ для записи. Обычно это только каталог в C: \ пользователях \ username, как подкаталог AppData. Головная боль, которой вы должны обратиться к тому, что файл .reg должен быть адаптирован для каждого отдельного пользователя, поскольку его имя пользователя отличается. Таким образом, значение CodeBase в файле .reg должна быть изменена для каждого пользователя. Это масштабируется плохо, мягко говоря.

Ответ, который вы нашли, просто не очень хороший. Единственное решение, которое действительно работает, заключается в том, чтобы написать свою собственную регистрационную функцию. Тот, который пишет ключи реестра в HKCU вместо HKLM. Используйте ComegisterFunction] Атрибут . Вы знаете из файла .reg Какие ключи нужно написать. И вы используете сборку. GetExecutingSashbly (). Расположение, чтобы выяснить, что написать для значения реестра CodeBase. Не забывайте [Comunregisterfunction].

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top