[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
http://files.rsdn.org/67021/op.jpg
Re: [FYI] RegSvr32 для .NET-сборок
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.02.16 17:15
Оценка: +1
Здравствуйте, ?, Вы писали:

?>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>>
AVK Blog
Re[2]: [FYI] RegSvr32 для .NET-сборок
От: α Российская Империя  
Дата: 23.02.16 17:22
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>И? В чем бенефит по сравнению с с обычным regasm? Только в том что регистрируется regsvr32?


Утилита regsvr32 обычно лежит в path и доступна без указания полного пути

Regasm требует указания полного пути который на трезвую голову никто не помнит (ну или надо явно запускать Visual Studio Command Prompt), к тому же она например на моей машине присутствует аж в четырех ипостасях (фреймворк 2/4/x32/x64).
http://files.rsdn.org/67021/op.jpg
Re[3]: [FYI] RegSvr32 для .NET-сборок
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 23.02.16 17:51
Оценка:
Здравствуйте, α, Вы писали:

α>Здравствуйте, 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 при необходимости
и солнце б утром не вставало, когда бы не было меня
Re[3]: [FYI] RegSvr32 для .NET-сборок
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.02.16 20:45
Оценка:
Здравствуйте, ?, Вы писали:

?>Утилита regsvr32 обычно лежит в path и доступна без указания полного пути
?>Regasm требует указания полного пути

Т.е. это все чтобы не указывать полный путь? Понял.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.