[英]delphi using SQL Server with WMI
我需要確定 sql server 實例(本地)作為安裝程序的一部分。
有沒有人有任何代碼如何使用 WMI 和 Delphi 執行此操作?
法學博士。
@JD,要使用 WMi 獲取 Sql Server 實例,您必須使用WMI Provider for Configuration Management Classes ,請參閱ServerSettings類。
檢查此示例代碼,使用 2 種不同的方法來完成相同的任務。
program GetWMI_SqlInstancesInfo;
{$APPTYPE CONSOLE}
uses
Windows,
Classes,
ActiveX,
Variants,
SysUtils,
WbemScripting_TLB in '..\..\Documents\RAD Studio\5.0\Imports\WbemScripting_TLB.pas';
procedure WmiHelper(RootStr,WmiQuery:String);
var
WMIServices : ISWbemServices;
WMILocator : ISWbemLocator;
Root : ISWbemObjectSet;
SWbemObject : ISWbemObject;
Item : IEnumVariant;
rgVar : OleVariant;
pCelFetched : Cardinal;
begin
WMILocator := CoSWbemLocator.Create();
WMIServices := WMILocator.ConnectServer('.', RootStr,'', '', '', '', 0, nil); //
Root := WMIServices.ExecQuery(WmiQuery,'WQL', 0, nil);
Item := (Root._NewEnum) as IEnumVariant;
while (Item.Next(1, rgVar, pCelFetched) = S_OK) do
begin
SWbemObject := IUnknown(rgVar) as ISWBemObject;
if (SWbemObject <> nil) then
begin
SWbemObject.Properties_;
Writeln(SWbemObject.GetObjectText_(0));
end;
end;
end;
//option 1 , shows all properties of the class just by running the query
procedure GetWMISQLInstancesInfo;
begin
WmiHelper('root\Microsoft\SqlServer\ComputerManagement','SELECT * FROM ServerSettings');
//WmiHelper('root\Microsoft\SqlServer\ComputerManagement','SELECT * FROM SqlServiceAdvancedProperty where SQLServiceType = 1');
end;
//option 2 , in this case you must know the properties names to get the info
procedure GetWMISQLInstancesInfo2;
var
WMIServices: ISWbemServices;
Root : ISWbemObjectSet;
Item : Variant;
I : Integer;
begin
WMIServices := CoSWbemLocator.Create.ConnectServer('.', 'root\Microsoft\SqlServer\ComputerManagement','', '', '', '', 0, nil);
Root := WMIServices.ExecQuery('SELECT * FROM ServerSettings','WQL', 0, nil);
for I := 0 to Root.Count - 1 do
begin
Item := Root.ItemIndex(I);
Writeln('Instance Name '+VarToStr(Item.InstanceName));
end;
End;
begin
try
CoInitialize(nil);
try
GetWMISQLInstancesInfo;
GetWMISQLInstancesInfo2;
Readln;
finally
CoUninitialize;
end;
except
on E:Exception do
Begin
Writeln(E.Classname, ': ', E.Message);
Readln;
End;
end;
end.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.