Delphi Win32_事件日志类

Delphi Win32_事件日志类,delphi,Delphi,正在尝试转换,以便指定要备份的日志 使用第行获取无效查询 如何正确指定查询的参数 FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_NTEventlogFile Where LogFileName=' + Log +' ','WQL',wbemFlagForwardOnly); 正确的语法是这样的 FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win

正在尝试转换,以便指定要备份的日志 使用第行获取无效查询 如何正确指定查询的参数

FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_NTEventlogFile Where        LogFileName=' + Log +' ','WQL',wbemFlagForwardOnly);
正确的语法是这样的

FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_NTEventlogFile Where LogFileName="Application"','WQL',wbemFlagForwardOnly);
程序

procedure EventLog(Log : string);
const
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator : OLEVariant;
FWMIService   : OLEVariant;
FWbemObjectSet: OLEVariant;
FWbemObject   : OLEVariant;
oEnum         : IEnumvariant;
iValue        : LongWord;
begin
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_NTEventlogFile Where        LogFileName=' + Log +' ','WQL',wbemFlagForwardOnly);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  if oEnum.Next(1, FWbemObject, iValue) = 0 then
  begin
    FWbemObject.BackupEventLog(SaveDirectory + Computer + Log + '.evt');
    FWbemObject:=Unassigned;
  end;
end;

算了吧

FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_NTEventlogFile Where LogFileName="' + Log +'"','WQL',wbemFlagForwardOnly);

你刚才是不是用下面的几行回答了前两行中的问题:正确的语法有效?但事实并非如此。你只问问题,然后在下面的答案框中回答。如果我的假设是错误的,然后我很困惑,我建议你重新表述这个问题。不,你很好,我忘记正确关闭select了,因为我已经这样做了,它正常工作了。你看到了吗:我这样做了,在那里我偶然发现答案将文本注入到查询中是一种糟糕的做法,因为它允许sql注入漏洞攻击。您应该改用参数。不确定WMI是否允许参数。这将被我们的技术人员用来导出服务器上的事件日志和日志文件,我知道注入不是最好的主意,但我不太担心这个项目