2013-09-26 3 views
1

Можно ли метод доступа С # DLL от VBScript без регистрации его regasm? Я буду создавать DLL, так в значительной степени любое экзотическое требование, чтобы сделать его видимым для VBScript, я могу сделать ...C# DLL из VBScript, не Regasm

Я прочитал here, что можно было бы использовать GetObject от VBScript для достижения этой цели, но у меня есть пробовал это без успеха ... Есть ли что-то еще, что мне нужно сделать, кроме того, чтобы сделать DLL «COM видимым», чтобы сделать эту работу?

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

ответ

2

Нет, регистрация не требуется, единственный способ, которым интерпретатор сценариев может найти DLL, которая содержит ProgId, который используется в CreateObject сценария() вызова. Изолированный COM с манифестом не работает, вы не можете изменять манифест для интерпретатора скриптов.

Существует техническое решение: может написать ключи реестра в кустах реестра HKCU, не приобретая повышение UAC. Инструмент Regasm.exe всегда записывает их в улей HKLM. Это также регистрирует сборку, но только для пользователя, запускающего Regasm.exe. Это, однако, довольно болезненно и легко ошибиться, вы должны написать свой собственный метод регистрации и применить [ComRegisterFunction] attribute. Теперь вам нужно использовать класс RegistryKey для установки ключей. То же самое для функции [ComUnregisterFunction], она должна снова удалить ключи. Есть целый много плохих примеров, проведённого на межсетях, лучший способ, чтобы получить это право является использование ProcMon Sysinternals' наблюдать ключи реестра, которые пишутся при использовании Regasm.exe обычно, а затем воспроизвести это в своем коде, используя HKCU.

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

+0

Вместо того чтобы использовать ProcMon, я бы рекомендовал использовать '/ regfile' вариант regasm.exe так он будет генерировать .reg того, что он будет делать вместо того, чтобы на самом деле делать это. Затем просто напишите соответствующий C# в ComRegisterFunction, который использует HKCU. (Легко пропустить что-то, что ProcMon выплевывает). – vcsjones

+0

Нет, не делай этого. Он неправильно записывает записи раздела реестра, которые добавлены HKLM \ Software \ Classes \ TypeLib. Регламент - это немного минного поля. –

+0

Регистрация не требуется. См. Мой ответ. – Nilpo

0

Принятый ответ неверен, что регистрация требуется использовать DLL. Вы можете использовать метод GetObject() вместо метода CreateObject(), как показано в ответе на этот вопрос.

Using DLLs in VBScript

Смежные вопросы