我查看了 SQL2008 R2 功能包中的 SharedManagementObjects.msi 和我的 Windows 注册表(SQL2008 R2 Dev 安装在这台机器上),我相信这些是应该用来检测 SMO 的 reg 键(全部在 HKLM 下):
SOFTWARE\Microsoft\Microsoft SQL Server\SharedManagementObjects\CurrentVersion - 这显然是主键,表明安装了某些版本的 SMO。
SOFTWARE\Microsoft\Microsoft SQL Server 2008 Redist\SharedManagementObjects\1033\CurrentVersion - 这可能意味着安装了2008英文。可能只检查 SOFTWARE\Microsoft\Microsoft SQL Server 2008 Redist\SharedManagementObjects 的存在就足够了。
同样适用于 SQL2012:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server 2012 Redist\SharedManagementObjects\1033\CurrentVersion
但不是 SQL2005!即使我在这台机器上也安装了 2005。
还有一件事,您通常还需要 Microsoft SQL Server 系统 CLR 类型,因为 SMO 依赖于它们。SQLSysClrTypes.msi 只有一个注册表项:SOFTWARE\Microsoft\Microsoft SQL Server\RefCount\SQLSysClrTypes