Delphi 2007之后是否有WmiSet的替代或更新版本?

4
我们目前使用来自Online AdminWmiSet来运行Wmi查询并查询远程机器上的注册表设置。
问题在于它只支持Delphi直到RAD Studio 2007。
我们目前正在升级到Delphi XE,需要知道是否有人知道或拥有更新版本的WmiSet组件或类似的内容。
我们已经尝试联系供应商,但到目前为止,我们的任何查询都没有得到回复。
2个回答

7
Pieter,我之前启动了一个名为Delphi Wmi Class Generator的项目,该项目创建了全面记录的Object Pascal类(兼容于delphi 7至XE),以访问WMI。
请检查此代码,它使用应用程序创建的TWin32_BIOS类来访问远程机器中的Win32_BIOS wmi类。
uses
  SysUtils,
  uWmiDelphiClass in '..\..\uWmiDelphiClass.pas',
  uWin32_BIOS in '..\..\root_CIMV2\uWin32_BIOS.pas';

var
  RemoteBiosInfo : TWin32_BIOS;
  i              : integer;
begin
   try
     RemoteBiosInfo:=TWin32_BIOS.Create(False);
     try

       RemoteBiosInfo.WmiServer:='192.168.217.128';
       RemoteBiosInfo.WmiUser  :='Administrator';
       RemoteBiosInfo.WmiPass  :='password'; 
       RemoteBiosInfo.LoadWmiData;

       if RemoteBiosInfo.WmiConnected then  
       begin
         Writeln('Serial Number       '+RemoteBiosInfo.SerialNumber);
         Writeln('BuildNumber         '+RemoteBiosInfo.BuildNumber);
         if RemoteBiosInfo.BIOSVersion.Count>0 then
         Writeln('Version             '+RemoteBiosInfo.BIOSVersion[0]);
         Writeln('Identification Code '+RemoteBiosInfo.IdentificationCode);
         Writeln('Manufacturer        '+RemoteBiosInfo.Manufacturer);
         Writeln('SoftwareElementID   '+RemoteBiosInfo.SoftwareElementID);
         Writeln('Release Date        '+DateToStr(RemoteBiosInfo.ReleaseDate));
         Writeln('Install Date        '+DateToStr(RemoteBiosInfo.InstallDate));
         Writeln('Target S.O          '+GetTargetOperatingSystemAsString(RemoteBiosInfo.TargetOperatingSystem));
         Writeln('Soft. element state '+GetSoftwareElementStateAsString(RemoteBiosInfo.SoftwareElementState));

         Writeln('');
         Writeln('Bios Characteristics');
         Writeln('--------------------'); 
         for i:=Low(RemoteBiosInfo.BiosCharacteristics)  to High(RemoteBiosInfo.BiosCharacteristics) do
          Writeln(GetBiosCharacteristicsAsString(RemoteBiosInfo.BiosCharacteristics[i]));
       end
       else
       Writeln('No connected');
     finally
      RemoteBiosInfo.Free;
     end;
   except
    on E:Exception do
     Writeln(E.Classname, ': ', E.Message);
   end;

 Readln;
end.

非常感谢!我们一定会查看的。 - Pieter van Wyk
抱歉更改我的答案,但是Olaf让我们能够在Delphi XE中使用当前组件,因此我们不必根据它修改现有的代码。问候。 - Pieter van Wyk

2
将WMISet库转换为Unicode Delphi并不太困难。我已经将其转换为Delphi 2009和2010,编译器会指出需要更改的代码行。如果我有时间,我将准备一个原始代码和更改后的UniCode Delphi之间的“差异”,并上传它。
祝好,
Olaf

Olaf。那将是最有帮助的。谢谢。 - Pieter van Wyk
我终于找到时间创建了DIFF文件并将它们上传到Torry.net:链接。请在部署到生产环境之前进行彻底测试。 - Olaf Hess
Olaf,非常感谢您提供的差异文件。一切都正常工作了,现在我们已经将WMISet安装到Delphi XE中了。问候。 - Pieter van Wyk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接