WMI를 사용하여 설치된 SQL Server 버전에 대한 정보를 찾습니다. 이 방법에는 여러 가지 가능한 실패 문제가 있습니다. 그러나 레지스트리 솔루션보다 훨씬 낫습니다.
레지스트리 키가 어떤 이유로 든 손상된 경우 대체 솔루션을 검색했습니다.
GetWmiNameSpace
는 SQL 서버 노드에서 사용할 네임 스페이스의 목록을 가져옵니다. 당신이 추가 정보를
GetSqlServerValidationResults 기능을 확인
실제 버전을 가져 오는에 대한 GetSqlServerValidationResults에 반환하고 싶은 네임 스페이스를 자격. 나는 함수에서 if 조건을 부풀리기 위해 이름값 쌍을 얻는 것에 매우 흥미가있었습니다. 시간 제약 때문에 이름 값 목록으로 변경하는 데 더 많은 시간을 할당 할 수 없습니다. 당신의
function GetWmiNameSpace(): String;
var
oWMI, oServer, oProvider, oInstances, collSubNamespaces: Variant;
i: Integer;
item: Variant;
begin
oWMI := CreateOleObject('wbemScripting.SWbemLocator');
oServer := oWMI.ConnectServer('.', 'root/Microsoft/sqlserver');
collSubNamespaces := oServer.ExecQuery('select * from __namespace');
for i := 0 to collSubNamespaces.Count - 1 do
begin
item := collSubNamespaces.ItemIndex[i];
if Pos('ComputerManagement', item.Name) = 1 then Result := item.Name;
Log('Namespaces are ' + item.Name);
end;
end;
function GetSqlServerValidationResults(): String;
var
Query: string;
WbemLocator, WbemServices, WbemObjectSet: Variant;
server: Variant;
I: Integer;
versions: TStringList;
begin
WbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
WbemServices :=
WbemLocator.ConnectServer(
'.', 'root\Microsoft\SqlServer\' + GetWmiNameSpace());
Query := 'SELECT * FROM SqlServiceAdvancedProperty';
WbemObjectSet := WbemServices.ExecQuery(Query);
if not VarIsNull(WbemObjectSet) and (WbemObjectSet.Count > 0) then
begin
for I := 0 to WbemObjectSet.Count - 1 do
begin
server := WbemObjectSet.ItemIndex(I);
if not VarIsNull(server) then
begin
if server.PropertyName = 'VERSION' then
begin
Log('Name' + server.PropertyName);
if not VarIsNull(server.PropertyStrValue) then
begin
Log('value ==> ' + server.PropertyStrValue + '[' +
IntToStr(pos('13.0.',server.PropertyStrValue)));
if pos('10.0.', server.PropertyStrValue) = 1 then Result := '2008';
if pos('10.5', server.PropertyStrValue) = 1 then Result := '2008R2';
if pos('11.0.', server.PropertyStrValue) = 1 then Result := '2012';
if pos('12.0.', server.PropertyStrValue) = 1 then Result := '2014';
if pos('13.0.', server.PropertyStrValue) = 1 then Result := '2016';
end;
end;
end;
end;
end;
end;
가능한 중복을 비교하고자 당신은 버전을 확인하기 위해 번호를 변경해야 할 수도 있습니다 [SQL Server 버전을 확인하는 방법] (http://stackoverflow.com/questions/20351674/how-to -check-sql-server-version) – 3N1GM4
LocallDB 정보는 다음과 같습니다. http://stackoverflow.com/questions/11628316/sql2012-localdb-how-to-check-in-c-sharp-if-it-is-currently -installed/11629024 # 11629024 – ErikEJ
이 질문을 다루는 기존 주제가 있다는 것을 알고 계십니다. 잘못했거나 불만족 스럽다면, 우리에게 무엇이 잘못되었는지 설명해야합니다. 그렇지 않으면 귀하의 질문은 중복됩니다. –