[FYI] RegSvr32 для .NET-сборок
От: α Российская Империя  
Дата: 20.02.16 10:32
Оценка: 60 (4)
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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.