Я взглянул на SharedManagementObjects.msi из пакета функций SQL2008 R2 и моего реестра Windows (на этом компьютере установлен SQL2008 R2 Dev), и я считаю, что это ключи reg, которые следует использовать для обнаружения SMO (Все в HKLM ):
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Microsoft SQL Server \ SharedManagementObjects \ CurrentVersion - это, очевидно, основной ключ, указывающий, что установлена некоторая версия SMO.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Microsoft SQL Server 2008 Redist \ SharedManagementObjects \ 1033 \ CurrentVersion - это, вероятно, означает, что установлен английский язык 2008 года. Возможно, достаточно просто проверить наличие ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ \ Microsoft \ Microsoft SQL Server 2008 Redist \ SharedManagementObjects.
То же самое относится к SQL2012:
HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Microsoft SQL Server 2012 Redist \ SharedManagementObjects \ 1033 \ CurrentVersion
Но НЕ SQL2005! хотя у меня на этом компьютере также установлен 2005 год.
Еще одна вещь, обычно вы также хотели бы иметь системные типы CLR Microsoft SQL Server, поскольку SMO зависит от них.
SQLSysClrTypes.msi имеет только один раздел реестра:
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Microsoft SQL Server \ RefCount \ SQLSysClrTypes