C# 如果CMI_数据文件类上的WMI查询具有“where condition1和condition2”(C),则会生成“无效查询”

C# 如果CMI_数据文件类上的WMI查询具有“where condition1和condition2”(C),则会生成“无效查询”,c#,.net,wmi,C#,.net,Wmi,好的,以下是我仅对系统执行的操作。管理层调用: 简单查询和方法调用在同一连接上工作。此查询将不可用。并且该文件存在于远程计算机上。线索 myQuery = "Select * from CIM_DataFile Where Drive = 'C:' AND Path = '\\Users\\someguy\\Documents\\' AND FileName = 'Default' AND Extension = 'rdp'"; options = new ConnectionOptions(

好的,以下是我仅对系统执行的操作。管理层调用:

简单查询和方法调用在同一连接上工作。此查询将不可用。并且该文件存在于远程计算机上。线索

myQuery = "Select * from CIM_DataFile Where Drive = 'C:' AND Path = '\\Users\\someguy\\Documents\\' AND FileName = 'Default' AND Extension = 'rdp'";

options = new ConnectionOptions();
options.Username = myUsername;
options.Password = myPassword;
options.Authority = "ntlmdomain:MYDOMAIN";
scope = new ManagementScope("\\\\REMOTEMACHINE\\root\\CIMV2", options);
scope.Connect();
searcher = new ManagementObjectSearcher(scope, new ObjectQuery(myQuery));
myResults = searcher.Get();
ManagementObjectSearcher.Get获取一个ManagementException,表示查询无效。一个更简单的查询,比如说,从Win32_NetworkAdapter中选择*


我试图将WHERE减少为一个,即从CIM_数据文件中选择*扩展名='rdp'。它是有效的,虽然很明显它不能满足我的需求。在编辑之前,我错误地认为即使在那时它也不起作用;请看这里的评论:我已经到了极限。

我是个白痴。请不要打我

首先,只有在WHERE子句中传递文件名的所有组件时,查询才能可靠地工作

其次,我必须在路径组件中加倍反斜杠,我做错了。我做到了:

pathPath.Replace("\\", "\\\\");
而我必须做的是:

pathPath = pathPath.Replace("\\", "\\\\");

对。我工作的假设是String.Replace在线更改了字符串。坏C新手。糟糕。

你能仔细检查一下SELECT*FROM CIM_DataFile的大小写吗,扩展名='rdp',我知道它失败的原因,但是如果那一行真的失败并且键入正确,它就会发生冲突。见鬼?现在成功了!VST一定在缓存旧代码或其他东西。我做了一个重建解决方案,以防我的代码驻留在解决方案中的不同程序集中。看来你的理论有道理。所以这是什么?很有趣。上面用WHERE子句进行的查询是什么?其他的呢?是的,只要只有一个WHERE子句,不管它在哪个字段工作;任何一个和另一个子句都不会。它会以不同的方式出错,具体取决于我搜索的字段。让我试着总结一下。所有提到的文件或目录都存在。C:\config.sys、C:\autoexec.bat和根目录中的任何文件:-使用文件名为“xxxx”且扩展名为“yyy”的文件。如果我在搜索中包含驱动器属性,查询将被接受,但有时(只是有时)什么也不返回。在搜索中包含路径只会使我得到一个无效的查询异常。下面是一个文本文件,其中包含我得到的结果:users.vialink.com.br/jcastro/CIM_DataFile.txt不要太沮丧。我只是犯了完全相同的错误