【问题标题】:SQL Server Management Studio 2008 add inSQL Server Management Studio 2008 添加
【发布时间】:2016-10-06 14:22:28
【问题描述】:

我正在尝试使用带有 VS.NET 13 的 Visual Studio Add In 项目模板创建一个 SSMS 2008 插件。我已按照 CodeProject 中 this tutorial 中的说明进行操作。但是,本教程适用于 SSMS 2012,文件夹结构与 SSMS 2008 的文件夹结构有很大不同。我的问题是:我应该把 .addin 文件放在哪里才能让 SSMS 2008 使用它?
另外,这是我创建的注册表项

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

Connect 是为插件与宿主应用程序连接提供逻辑的类的名称。它是否正确?
提前致谢!

【问题讨论】:

    标签: c# sql-server-2008 ssms visual-studio-addins ssms-addin


    【解决方案1】:
    SSMS 2008 不需要

    .addin 文件。您创建的正确注册表项和相应的 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>
    

    【讨论】:

    • 所以只需创建我创建的注册表项,然后将加载项的 .dll 放在 Program Files(x86) 文件夹中? SSMS 如何知道在哪里可以找到它们?
    • @EndiZhupani 您的 CLSID CodeBase 指向实际的 dll。我已经在答案中包含了示例代码。
    • 我想我设法使用 LoadBehavior = 1 安装它,但现在当我打开 SSMS 时,它无法加载插件。它显示的错误消息是“不支持此类接口”并出现错误编号 80004002。会不会是 Connect.cs 中的默认接口有问题?
    • @EndiZhupani Connect 类应该附加 System.Runtime.InteropServices.Guid("myguid") 和 ComVisible(true) 属性。
    猜你喜欢
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多