2016-05-19 2 views
0

Я хочу создать простое консольное приложение для автоматической регистрации dll.C# register dll, используя путь к файлу (RegistrationService.RegisterAssembly)

После некоторых исследований я нашел этот кусок кода:

public static bool Register_Dlls(string dllPath) 
{ 
    Assembly asm = Assembly.LoadFile(dllPath); 
    RegistrationServices regAsm = new RegistrationServices(); 
    bool bResult = regAsm.RegisterAssembly(asm, AssemblyRegistrationFlags.SetCodeBase); 
    return bResult; 
} 

Реализация моего приложения, используя этот код и запустить его в качестве администратора DLL, не может быть зарегистрирован. Это моя проблема.

Но с помощью команды Regasm внутри ЦМД (как администратор), то длл зарегистрирован правильно:

C:\windows\system32> C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe C:\PWS\Bin\MyContextMenu.dll /codebase 

Мой вопрос: я что-то или выше код забыть не может быть использована для моей цели?

dll был скомпилирован в режиме «ЛЮБЫЕ ЦП» в режиме платформы, как и в моем приложении, и мне нужно зарегистрировать сборку на машине x64.

+0

В проекте вашей библиотеки dll в файле AssemblyInfo должен существовать атрибут 'ComVisible' со значением по умолчанию' false'. Вы изменили его на «истинный»? Результирующая строка должна быть '[assembly: ComVisible (true)]'. – Sam

+0

«не может быть зарегистрирован» не является полезной диагностикой, вы должны сообщить нам, как выглядит сбой. Если вы не видите приглашение на повышение UAC, тогда сбой гарантирован. –

+0

Да, класс COM видимый, я использовал атрибут '[ComVisible (true)]' перед объявлением класса. – baru

ответ

0

Решение:

Я составил мое приложение форсирования режима 'x64' Решение Platforms, теперь все работает отлично.

Кроме того, после последнего Ханса Пассанта comment, я улучшил свой код, изменив манифест в своем поле requestedExecutionLevel и добавив метод IsUserAdministrator(). Спасибо, Ханс!

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