SSMS插件开发指南
清泛原创
创建步骤同VS-Addin,请查看《VS Addin插件基本开发入门》。
一、调试参数,要启动新的SSMS实例进行调试:

C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe
C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\
二、运行配置(有两种方法:一是自己写注册表,二是在“生成”选项卡中,选中“为COM互操作注册”)


SSMS加载插件的原理和VS插件的原理略有不同,VS直接加载Addins目录中.Addin文件,指定载入哪个dll;而SSMS读取注册表中Addins子项目(HKEY_CURRENT_USER而不是HKEY_LOCAL_MACHINE),然后加载注册表已注册的COM组件(由于开启“COM互操作注册”,VS编译时已经将DLL注册到注册表)。
以上是SMSS 2008加载插件的方式。获取DTE方式:
_applicationObject = (DTE2)ServiceCache.ExtensibilityModel;
注意:开发使用的VS版本不能高于SSMS的版本,否则会出现各种各样意想不到的问题。
SSMS2008一般采用VS2005或VS2008开发,SSMS2012采用VS2012开发。SSMS2008与SSMS2012一些获取对象等细节方面也有少量差异。最好使用各自的VS版本生成基本代码后,再添砖加瓦。
三、本文案例采用VS2012开发SSMS2012插件,其他版本的请读者自行尝试,万变不离其中。
SMSS 2012则完全不同,它加载的方式同VS 2012。不过Addins文件夹不在“%userprofile%\Documents\Visual Studio 2012\Addins”中,而在“C:\ProgramData\Application Data\Microsoft\MSEnvShared\AddIns”中。
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
if (connectMode == ext_ConnectMode.ext_cm_Startup)(此处还是这个,同SMSS 2008)。
另外还需要额外引入三个dll,文件如下:



如果SSMS 2012不加载插件,可以尝试修改如下配置:

四、功能开发:
探索点:弹出SSMS对话框、SQL执行的事件、结果Grid数据的获取。
需求:工具栏添加一个菜单,点击菜单弹出对话框,点“Execute SQL”后弹出测试消息框,显示结果Grid第一个单元格的内容。
基础代码请自行使用VS2012完成,包括添加一个用户控件作为对话框窗口。
OnConnection相关函数如下:
运行效果:
获取Grid数据相关代码:
ShellUtilities.cs代码如下:
运行效果:
一、调试参数,要启动新的SSMS实例进行调试:

C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe
C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\
二、运行配置(有两种方法:一是自己写注册表,二是在“生成”选项卡中,选中“为COM互操作注册”)


SSMS加载插件的原理和VS插件的原理略有不同,VS直接加载Addins目录中.Addin文件,指定载入哪个dll;而SSMS读取注册表中Addins子项目(HKEY_CURRENT_USER而不是HKEY_LOCAL_MACHINE),然后加载注册表已注册的COM组件(由于开启“COM互操作注册”,VS编译时已经将DLL注册到注册表)。
以上是SMSS 2008加载插件的方式。获取DTE方式:
_applicationObject = (DTE2)ServiceCache.ExtensibilityModel;
注意:开发使用的VS版本不能高于SSMS的版本,否则会出现各种各样意想不到的问题。
SSMS2008一般采用VS2005或VS2008开发,SSMS2012采用VS2012开发。SSMS2008与SSMS2012一些获取对象等细节方面也有少量差异。最好使用各自的VS版本生成基本代码后,再添砖加瓦。
三、本文案例采用VS2012开发SSMS2012插件,其他版本的请读者自行尝试,万变不离其中。
SMSS 2012则完全不同,它加载的方式同VS 2012。不过Addins文件夹不在“%userprofile%\Documents\Visual Studio 2012\Addins”中,而在“C:\ProgramData\Application Data\Microsoft\MSEnvShared\AddIns”中。
Putting SSMSAddin.addin into %PROGRAMDATA%\Application Data\Microsoft\MSEnvShared\Addins\OnConnection()函数开始恢复这样:
(C:\ProgramData\Application Data\Microsoft\MSEnvShared\Addins\)
Will install add-in for all users on the machine.
Putting SSMSAddin.addin into %APPDATA%\Microsoft\MSEnvShared\Addins\
(C:\Users\UserName\AppData\Roaming\Microsoft\MSEnvShared\Addins\)
will install for specific user only.
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
if (connectMode == ext_ConnectMode.ext_cm_Startup)(此处还是这个,同SMSS 2008)。
另外还需要额外引入三个dll,文件如下:



如果SSMS 2012不加载插件,可以尝试修改如下配置:

四、功能开发:
探索点:弹出SSMS对话框、SQL执行的事件、结果Grid数据的获取。
需求:工具栏添加一个菜单,点击菜单弹出对话框,点“Execute SQL”后弹出测试消息框,显示结果Grid第一个单元格的内容。
基础代码请自行使用VS2012完成,包括添加一个用户控件作为对话框窗口。
OnConnection相关函数如下:
运行效果:



ShellUtilities.cs代码如下:
运行效果:

工程源代码下载:SSMSAddin.zip。
该部分源码研究通过查阅英文资料、反编译ssmsboost等,对于有SSMS插件开发需求的小伙伴们,应该能够少走很多弯路。
(http://www.ssmsboost.com/ 一款功能强大的SSMS插件,反编译研究可以得到不少方案。)
该部分源码研究通过查阅英文资料、反编译ssmsboost等,对于有SSMS插件开发需求的小伙伴们,应该能够少走很多弯路。
(http://www.ssmsboost.com/ 一款功能强大的SSMS插件,反编译研究可以得到不少方案。)
对我有用
(6)
100%
没啥用
(0)
0%