Re[4]: Определеить наличие платной версии SQL Server 2008
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 10.06.10 04:49
Оценка: 1 (1) +1
Здравствуйте, DenisCh, Вы писали:

DC>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\InstalledInstances

DC>У меня в этом параметре стоит SQLEXPRESS. И правда, у меня установлен 2008 експресс...
DC>А вообще там мультистрока.

так это просто имена, которые даются при инсталляции, и SQLEXPRESS — это по умолчанию, а установить можно с любым
Re[7]: Определеить наличие платной версии SQL Server 2008
От: Lloyd Россия  
Дата: 09.06.10 09:07
Оценка: +2
Здравствуйте, sasha, Вы писали:

L>>Как отличить Express от не-Express тебе же вроде написали.


S>Сделать это надо без соединения с сервером. Об этом вроде никто не писал.


Ну да, об этом даже ты не писал.
Как определить наличие платной версии SQL Server 2008
От: Sergei MO Россия  
Дата: 10.06.10 13:21
Оценка: 26 (1)
#Имя: FAQ.db.sqlserver.express.or.not.express
Здравствуйте, Odi$$ey, Вы писали:

OE>та же фигня, проверяется наличие инстанции с именем по-умолчанию


Неправда, не та же. Ведь никто не мешает перебрать все экземпляры серверов, а не искать по заранее заданному имени. Вот код:

using System;
using System.Management;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Instance name       Edition");
        Console.WriteLine("----------------------------------------------------------");

        ManagementObjectSearcher getSqlServices = new ManagementObjectSearcher(
            "root\\Microsoft\\SqlServer\\ComputerManagement10",
            "SELECT * FROM SqlService WHERE SQLServiceType = 1");
        
        foreach (ManagementObject sqlService in getSqlServices.Get())
        {
            string serviceName = (string)sqlService["ServiceName"];
            ManagementObjectSearcher getAdvancedProperties = new ManagementObjectSearcher(
                "root\\Microsoft\\SqlServer\\ComputerManagement10",
                "SELECT * FROM SqlServiceAdvancedProperty WHERE " +
                "SQLServiceType = 1 AND ServiceName = '" + serviceName + "'");

            string edition = "<Unknown>";
            foreach (ManagementObject property in getAdvancedProperties.Get())
            {
                if ((string)property["PropertyName"] == "SKUNAME" && (uint)property["PropertyValueType"] == 0)
                {
                    edition = (string)property["PropertyStrValue"];
                }
            }
            
            Console.WriteLine(serviceName.PadRight(20) + edition);
        }
    }
}


Вот вывод:

Instance name       Edition
----------------------------------------------------------
MSSQL$SQL2005       Developer Edition
MSSQL$SQLEX2008     Express Edition with Advanced Services
MSSQL$SQLEXPRESS    Express Edition
Re[3]: Определеить наличие платной версии SQL Server 2008
От: Lloyd Россия  
Дата: 02.06.10 15:08
Оценка: :)
Здравствуйте, sasha, Вы писали:

L>>1. Определить наличие: ищется по форуму.


S>Я на этом форуме с 2001 года и о правилах поведения в форуме имею четкое представление. Раз создал тему, значит искал и не нашел. Если есть желание помочь, а не просто напомнить о существовании поиска, буду благодарен.


Обороты сбавил. Я тут сюда тоже не вчера пришел. Вопрос про поиск сервера периодически поднимается, я даже сам как-то на него отвечал. Так что ищите, Шура, ищите. (c)

S>Повторю вопрос, речь идет об этапе инсталляции своего инстанса.


Нет, вопрос был другой.
Re[6]: Определеить наличие платной версии SQL Server 2008
От: sasha Грузия  
Дата: 09.06.10 08:59
Оценка: :)
L>Как отличить Express от не-Express тебе же вроде написали.

Сделать это надо без соединения с сервером. Об этом вроде никто не писал.
Re[5]: Определеить наличие платной версии SQL Server 2008
От: Lloyd Россия  
Дата: 10.06.10 15:59
Оценка: +1
Здравствуйте, Ziaw, Вы писали:

Z>Конектиться нельзя по условию. Имхо надо менять условия, при таких надежно задача не решается.


По условию нельзя коннектиться к SqlServer-у, про WMI ничего сказано не было.
Определеить наличие платной версии SQL Server 2008
От: sasha Грузия  
Дата: 02.06.10 14:34
Оценка:
Всем привет. Возникла необходимость определения наличия на машине установленной платной версии SQL Server 2008 (любой, отличной от Express). Погуглил, но четкого ответа не нашел. Может кто сталкивался и может помочь?
Re: Определеить наличие платной версии SQL Server 2008
От: Lloyd Россия  
Дата: 02.06.10 14:45
Оценка:
Здравствуйте, sasha, Вы писали:

S>Всем привет. Возникла необходимость определения наличия на машине установленной платной версии SQL Server 2008 (любой, отличной от Express). Погуглил, но четкого ответа не нашел. Может кто сталкивался и может помочь?


1. Определить наличие: ищется по форуму.
2. Определить версию: коннектишься, выполняешь SELECT @@VERSION, парсишь результат.
Re[2]: Определеить наличие платной версии SQL Server 2008
От: sasha Грузия  
Дата: 02.06.10 14:56
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>1. Определить наличие: ищется по форуму.


Я на этом форуме с 2001 года и о правилах поведения в форуме имею четкое представление. Раз создал тему, значит искал и не нашел. Если есть желание помочь, а не просто напомнить о существовании поиска, буду благодарен. Повторю вопрос, речь идет об этапе инсталляции своего инстанса. Если на компе уже есть платная версия, но делать ничего не надо, если нет — ставится Express+Instance.
Re[4]: Определеить наличие платной версии SQL Server 2008
От: sasha Грузия  
Дата: 02.06.10 18:49
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Нет, вопрос был другой.


Хорошо, сформулирую вопрос еще раз, возможно первый был недостаточно четко сформулирован.

Процедура инсталляции продукта должна определить, установлена ли на данной машине коммерческая (любая, кроме Express) версия SQL Server 2008. Интересует именно платная версия, наличие или отсутствие версии Express не важно. Спрашиваю потому что поиски по форуму результатов не дали. В основном встречаются вопросы о наличии какой-либо версии сервера, меня же интересует наличие коммерческой версии.
Re[5]: Определеить наличие платной версии SQL Server 2008
От: Lloyd Россия  
Дата: 09.06.10 08:52
Оценка:
Здравствуйте, sasha, Вы писали:

S>В основном встречаются вопросы о наличии какой-либо версии сервера, меня же интересует наличие коммерческой версии.


Как отличить Express от не-Express тебе же вроде написали.
Re[8]: Определеить наличие платной версии SQL Server 2008
От: sasha Грузия  
Дата: 09.06.10 09:47
Оценка:
S>>Сделать это надо без соединения с сервером. Об этом вроде никто не писал.

L>Ну да, об этом даже ты не писал.


Вот, пишу. Проверку надо сделать без соединения с сервером. Есть идеи?
Re[9]: Определеить наличие платной версии SQL Server 2008
От: Lloyd Россия  
Дата: 09.06.10 10:06
Оценка:
Здравствуйте, sasha, Вы писали:

L>>Ну да, об этом даже ты не писал.


S>Вот, пишу. Проверку надо сделать без соединения с сервером. Есть идеи?


Нет, теперь нету.
Re: Определеить наличие платной версии SQL Server 2008
От: Protey Россия  
Дата: 09.06.10 12:25
Оценка:
Здравствуйте, sasha, Вы писали:

S>Всем привет. Возникла необходимость определения наличия на машине установленной платной версии SQL Server 2008 (любой, отличной от Express). Погуглил, но четкого ответа не нашел. Может кто сталкивался и может помочь?


SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\CurrentVersion
Re[2]: Определеить наличие платной версии SQL Server 2008
От: sasha Грузия  
Дата: 09.06.10 19:42
Оценка:
Здравствуйте, Protey, Вы писали:
P>SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\CurrentVersion

И что там записано? Разные значения для разных редакций одной и той же версии? Спрашиваю, потому что у меня в системе такого ключа нет, хотя сервер установлен.
Re[3]: Определеить наличие платной версии SQL Server 2008
От: DenisCh Россия  
Дата: 10.06.10 03:35
Оценка:
Здравствуйте, sasha, Вы писали:

P>>SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\CurrentVersion

S>И что там записано? Разные значения для разных редакций одной и той же версии? Спрашиваю, потому что у меня в системе такого ключа нет, хотя сервер установлен.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\InstalledInstances
У меня в этом параметре стоит SQLEXPRESS. И правда, у меня установлен 2008 експресс...
А вообще там мультистрока.
... << RSDN@Home 1.2.0 alpha rev. 741>>
Re: Определеить наличие платной версии SQL Server 2008
От: Sergei MO Россия  
Дата: 10.06.10 08:26
Оценка:
Здравствуйте, sasha

Можно через WMI попробовать. Вот здесь есть пример для 2005-го сервера, для 2008-го должно быть аналогично.
Re[2]: Определеить наличие платной версии SQL Server 2008
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 10.06.10 09:29
Оценка:
Здравствуйте, Sergei MO, Вы писали:

SM>Можно через WMI попробовать. Вот здесь есть пример для 2005-го сервера, для 2008-го должно быть аналогично.


та же фигня, проверяется наличие инстанции с именем по-умолчанию
Re[4]: Определеить наличие платной версии SQL Server 2008
От: Ziaw Россия  
Дата: 10.06.10 15:44
Оценка:
Здравствуйте, Sergei MO, Вы писали:

OE>>та же фигня, проверяется наличие инстанции с именем по-умолчанию


SM>Неправда, не та же. Ведь никто не мешает перебрать все экземпляры серверов, а не искать по заранее заданному имени. Вот код:


Конектиться нельзя по условию. Имхо надо менять условия, при таких надежно задача не решается.
Re[4]: Определеить наличие платной версии SQL Server 2008
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 10.06.10 17:57
Оценка:
Здравствуйте, Sergei MO, Вы писали:

OE>>та же фигня, проверяется наличие инстанции с именем по-умолчанию

SM>Неправда, не та же. Ведь никто не мешает перебрать все экземпляры серверов, а не искать по заранее заданному имени. Вот код:

о! так вот этого же — "SELECT * FROM SqlService WHERE SQLServiceType = 1" там нету
Re: Определеить наличие платной версии SQL Server 2008
От: bnk СССР http://unmanagedvisio.com/
Дата: 18.06.10 17:22
Оценка:
Здравствуйте, sasha, Вы писали:

S>Всем привет. Возникла необходимость определения наличия на машине установленной платной версии SQL Server 2008 (любой, отличной от Express). Погуглил, но четкого ответа не нашел. Может кто сталкивался и может помочь?


SM>Можно через WMI попробовать. Вот здесь есть пример для 2005-го сервера, для 2008-го должно быть аналогично.


WMI в инсталляторе — (IMHO) — эТТо несерьезно (c)
Можно просто сделать еще один шажок с реестром, и все будет окей:

Set sh = CreateObject("WScript.Shell")

' читаем список имен установленных инстансов
instances = sh.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\InstalledInstances")

' пробегаем по списку и для каждого инстанса определяем его тип (EditionType)
For Each instance In instances

    ' получаем ключ реестра в котором находятся данные для этого инстанса
    instance_key = sh.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL\" & instance)

    ' читаем эти данные
    EditionType = sh.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\" & instance_key & "\Setup\EditionType")

    WScript.Echo "Instance=" & instance & ", EditionType=" & EditionType
Next


Instance=SQLEXPRESS, Edition=Express Edition
Instance=SHAREPOINT, Edition=Express Edition
Instance=MSSQLSERVER, Edition=Developer Edition


N.B. это работает для SQL 2005/2008, для SQL SERVER 2000/MSDE 2000 и ниже это не сработает — там (AFAIK) SKU вообще в реестр не пишется.
Впрочем, WMI для этого случая тоже не сработает, думается здесь возможна только лобовая проверка на то что продукт установлен по ProductCode (то есть по GUID)
Re[2]: Определеить наличие платной версии SQL Server 2008
От: Sergei MO Россия  
Дата: 19.06.10 07:51
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>WMI в инсталляторе — (IMHO) — эТТо несерьезно (c)

Почему, если не секрет?

bnk>Можно просто сделать еще один шажок с реестром, и все будет окей

Шажок не так прост, как кажется на первый взгляд. Например, если на 64-битную версию Windows поставить 32-битный SQL Server, то информацию о нём нужно искать в ветке HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server, а не в той, которая используется в примере.

bnk>N.B. это работает для SQL 2005/2008, для SQL SERVER 2000/MSDE 2000 и ниже это не сработает

Автор просил для 2008-го, так что это не критично. Но для старых версий, действительно, всё по-другому.
Re[3]: Определеить наличие платной версии SQL Server 2008
От: bnk СССР http://unmanagedvisio.com/
Дата: 19.06.10 08:23
Оценка:
Здравствуйте, Sergei MO, Вы писали:

SM>Здравствуйте, bnk, Вы писали:


bnk>>WMI в инсталляторе — (IMHO) — эТТо несерьезно

SM>Почему, если не секрет?

Претензии к WMI примерно такие
Ну например, вдруг WMI вообще выключена? И такое бывает =)
Далее, WMI, это же типа скрипты (=CreateObject, COM). Некоторые тупые антивирусы на скрипты в инсталляторах косо смотрят.
Ну или если .NET, то вдруг он не стоит? Такое тоже иногда случается =)
Еще общая тормознутость WMI угнетает.

Но строгих "противопоказаний" нет конечно.
В общем так — если "это" можно сделать через реестр или через WMI то лично я бы предпочел через реестр.

bnk>>Можно просто сделать еще один шажок с реестром, и все будет окей

SM>Шажок не так прост, как кажется на первый взгляд. Например, если на 64-битную версию Windows поставить 32-битный SQL Server, то информацию о нём нужно искать в ветке HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server, а не в той, которая используется в примере.

Ну да. 32 vs 64 — разбираться надо

bnk>>N.B. это работает для SQL 2005/2008, для SQL SERVER 2000/MSDE 2000 и ниже это не сработает

SM>Автор просил для 2008-го, так что это не критично. Но для старых версий, действительно, всё по-другому.

А, понятно
Re[4]: Определеить наличие платной версии SQL Server 2008
От: Sergei MO Россия  
Дата: 21.06.10 07:20
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Ну например, вдруг WMI вообще выключена? И такое бывает =)

bnk>Далее, WMI, это же типа скрипты (=CreateObject, COM). Некоторые тупые антивирусы на скрипты в инсталляторах косо смотрят.

Понятно, а CreateObject("WScript.Shell") — это типа не скрипты. И не COM. И WSHost отключить нельзя.

bnk>Ну или если .NET, то вдруг он не стоит? Такое тоже иногда случается =)


.NET в данном случае — просто средство для написания примера. Можно и без него.

bnk>Еще общая тормознутость WMI угнетает.


Это да, есть такое.


Моё предложение использовать WMI, а не реестр, было, в основном, из-за того, что я неоднократно встречал мнение, что ключи реестра для SQL Server официально не документированы и его разработчики не обязаны поддерживать их совместимость между разными версиями сервера и ОС. А WMI — это унифицированное средство, которое должно работать с любыми новыми версиями. По крайней мере, так планировалось.

Хотя, я сейчас поискал информацию по используемым свойствам (SKUNAME, SPLEVEL и т.п.) и тоже не нашёл официальной документации. Так что не знаю, кому верить.
Re[5]: Определеить наличие платной версии SQL Server 2008
От: bnk СССР http://unmanagedvisio.com/
Дата: 21.06.10 15:10
Оценка:
Здравствуйте, Sergei MO, Вы писали:

bnk>>Далее, WMI, это же типа скрипты (=CreateObject, COM). Некоторые тупые антивирусы на скрипты в инсталляторах косо смотрят.


SM>Понятно, а CreateObject("WScript.Shell") — это типа не скрипты. И не COM. И WSHost отключить нельзя.


Я же это, не предлагаю вставлять этот скрипт в исталлятор. Он просто для наглядности, чтобы идею продемонстрировать (ключи реестра, которые читать надо)...
Из реестра надо читать или встроенными средствами WI, или же например через CA. Я просто имел в виду, что реестр "отключить" нельзя, а WMI можно.

SM>Моё предложение использовать WMI, а не реестр, было, в основном, из-за того, что я неоднократно встречал мнение, что ключи реестра для SQL Server официально не документированы и его разработчики не обязаны поддерживать их совместимость между разными версиями сервера и ОС. А WMI — это унифицированное средство, которое должно работать с любыми новыми версиями. По крайней мере, так планировалось.

SM>Хотя, я сейчас поискал информацию по используемым свойствам (SKUNAME, SPLEVEL и т.п.) и тоже не нашёл официальной документации. Так что не знаю, кому верить.

Ну не знаю. Я бы проголосовал за реестр
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.