Надстройка SQL Server Management Studio 2008

Я пытаюсь создать надстройку SSMS 2008, используя шаблон проекта надстройки Visual Studio с VS.NET 13. Я следовал инструкциям в это руководство от CodeProject. Однако это руководство предназначено для SSMS 2012, а структура папок сильно отличается от структуры папок SSMS 2008. Мой вопрос: Куда мне поместить файл .addin, чтобы SSMS 2008 могла его использовать?
Кроме того, это раздел реестра, который я создал.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\Tools\Shell\Addins\AddInName.Connect

Connect — это имя класса, обеспечивающего логику подключения надстроек к хост-приложению. Это правильно?
Заранее спасибо!


person Endi Zhupani    schedule 06.10.2016    source источник


Ответы (1)


Файл .addin не требуется для SSMS 2008. Должно быть достаточно созданного вами раздела реестра и соответствующей регистрации CLSID.

Это то, что я использовал в своей надстройке Tabs Studio (msi, wix, текущий пользовательский установщик):

  <Component Id="TabsStudioSSMS2008Component" Guid="986C2BFA-4C21-42e4-96B3-7C0178B841DC">
    <RegistryKey Root="HKCU" Key="Software\Sergey Vlasov\Tabs Studio\Installer">
      <RegistryValue Type="integer" Name="SSMS2008" Value="1" KeyPath="yes"/>
    </RegistryKey>

    <RegistryKey Root="HKCU" Key="Software\Microsoft\Microsoft SQL Server\100\Tools\Shell\Addins\TabsStudio.Connect">
      <!--<RegistryValue Type="integer" Name="LoadBehavior" Value="3"/>-->
      <RegistryValue Type="string" Name="LoadBehavior" Value="[SSMS2008LOADBEHAVIOR]"/>
    </RegistryKey>

    <RegistryKey Root="HKCU" Key="Software\Classes\CLSID\{E52044B6-1EBA-4D82-AF2A-FABE2A79B106}">
      <RegistryValue Type="string" Value="TabsStudio.Connect"/>
    </RegistryKey>
    <RegistryKey Root="HKCU" 
                 Key="Software\Classes\CLSID\{E52044B6-1EBA-4D82-AF2A-FABE2A79B106}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" 
                 Action="createAndRemoveOnUninstall">
    </RegistryKey>
    <RegistryKey Root="HKCU" Key="Software\Classes\CLSID\{E52044B6-1EBA-4D82-AF2A-FABE2A79B106}\InprocServer32">
      <RegistryValue Type="string" Value="mscoree.dll"/>
      <RegistryValue Type="string" Name="ThreadingModel" Value="Both"/>
      <RegistryValue Type="string" Name="Class" Value="TabsStudio.Connect"/>
      <RegistryValue Type="string" Name="Assembly" Value="TabsStudio, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
      <RegistryValue Type="string" Name="RuntimeVersion" Value="v2.0.50727"/>
      <RegistryValue Type="string" Name="CodeBase" Value="[PersonalFolder]Visual Studio 2008\Addins\TabsStudio.dll"/>
    </RegistryKey>
    <RegistryKey Root="HKCU" Key="Software\Classes\CLSID\{E52044B6-1EBA-4D82-AF2A-FABE2A79B106}\InprocServer32\1.0.0.0">
      <RegistryValue Type="string" Name="Class" Value="TabsStudio.Connect"/>
      <RegistryValue Type="string" Name="Assembly" Value="TabsStudio, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
      <RegistryValue Type="string" Name="RuntimeVersion" Value="v2.0.50727"/>
      <RegistryValue Type="string" Name="CodeBase" Value="[PersonalFolder]Visual Studio 2008\Addins\TabsStudio.dll"/>
    </RegistryKey>
    <RegistryKey Root="HKCU" Key="Software\Classes\CLSID\{E52044B6-1EBA-4D82-AF2A-FABE2A79B106}\ProgId">
      <RegistryValue Type="string" Value="TabsStudio.Connect"/>
    </RegistryKey>

    <RegistryKey Root="HKCU" Key="Software\Classes\TabsStudio.Connect">
      <RegistryValue Type="string" Value="TabsStudio.Connect"/>
    </RegistryKey>
    <RegistryKey Root="HKCU" Key="Software\Classes\TabsStudio.Connect\CLSID">
      <RegistryValue Type="string" Value="{E52044B6-1EBA-4D82-AF2A-FABE2A79B106}"/>
    </RegistryKey>
  </Component>
person Sergey Vlasov    schedule 07.10.2016
comment
Итак, просто создайте раздел реестра, который я создал, а затем поместите .dll надстройки в папку Program Files (x86)? Как SSMS узнает, где их найти? - person Endi Zhupani; 07.10.2016
comment
@EndiZhupani Ваша CLSID CodeBase указывает на настоящую dll. Я включил пример кода в ответ. - person Sergey Vlasov; 07.10.2016
comment
Я думаю, что мне удалось установить его с LoadBehavior = 1, но теперь, когда я открываю SSMS, он не может загрузить надстройку. Отображаемое сообщение об ошибке: Нет такого интерфейса, поддерживаемого с номером ошибки 80004002. Может быть, что-то есть не так с интерфейсами по умолчанию в Connect.cs? - person Endi Zhupani; 07.10.2016
comment
@EndiZhupani К классу Connect должны быть прикреплены атрибуты System.Runtime.InteropServices.Guid(myguid) и ComVisible(true). - person Sergey Vlasov; 08.10.2016