1. Приделываем к сборке пакет
UnmanagedExports
Конфигурируем платформу (32/64)
2. Пишем две функции.
— проверки по вкусу
— в моем случае мне нужно зарегистрировать библиотеку для пользователя без привилегий администратора, поэтому я приделал переопределение ключа с HKLM в HKCU
[DllImport("advapi32.dll", SetLastError = true)]
private static extern long RegOverridePredefKey(IntPtr hkey, IntPtr hnewKey);
[DllExport]
public static void DllRegisterServer()
{
var key = Registry.CurrentUser.OpenSubKey(@"Software\Classes");
if (RegOverridePredefKey(Registry.ClassesRoot.Handle.DangerousGetHandle(), key.Handle.DangerousGetHandle()) != 0)
{
...
}
Assembly asm = Assembly.GetExecutingAssembly();
RegistrationServices regAsm = new RegistrationServices();
bool bResult = regAsm.RegisterAssembly(asm, AssemblyRegistrationFlags.SetCodeBase);
RegOverridePredefKey(Registry.ClassesRoot.Handle.DangerousGetHandle(), IntPtr.Zero);
key.Close();
}
[DllExport()]
public static void DllUnregisterServer()
{
var key = Registry.CurrentUser.OpenSubKey( @"Software\Classes");
if (RegOverridePredefKey(Registry.ClassesRoot.Handle.DangerousGetHandle(), key.Handle.DangerousGetHandle()) != 0)
{
...
}
Assembly asm = Assembly.GetExecutingAssembly();
RegistrationServices regAsm = new RegistrationServices();
bool bResult = regAsm.UnregisterAssembly(asm);
RegOverridePredefKey(Registry.ClassesRoot.Handle.DangerousGetHandle(), IntPtr.Zero);
key.Close();
}
3. Теперь сборку можно регистрировать через regsvr32, regasm и даже через rundll32.exe НашаСборка.dll,DllRegisterServer. Помним про платформу и про то, что для регистрации 32-сборок нужно вызывать соответствующие утилиты из C:\Windows\SysWow64
Здравствуйте, ?, Вы писали:
?>3. Теперь сборку можно регистрировать через regsvr32, regasm и даже через rundll32.exe НашаСборка.dll,DllRegisterServer.
И? В чем бенефит по сравнению с с обычным regasm? Только в том что регистрируется regsvr32?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, α, Вы писали:
α>Здравствуйте, AndrewVK, Вы писали:
AVK>>И? В чем бенефит по сравнению с с обычным regasm? Только в том что регистрируется regsvr32?
α>Утилита regsvr32 обычно лежит в path и доступна без указания полного пути
α>Regasm требует указания полного пути который на трезвую голову никто не помнит (ну или надо явно запускать Visual Studio Command Prompt), к тому же она например на моей машине присутствует аж в четырех ипостасях (фреймворк 2/4/x32/x64).
Я обычно батничек пишу типа
@echo off
setlocal
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe "%~dp0Моя.dll" /codebase
%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe "%~dp0Моя.dll" /codebase
Правда народ просит еще и инсталятор .Net при необходимости
Здравствуйте, ?, Вы писали:
?>Утилита regsvr32 обычно лежит в path и доступна без указания полного пути
?>Regasm требует указания полного пути
Т.е. это все чтобы не указывать полный путь? Понял.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>