我正在尝试使用WMI编写一个mini w32可执行文件来远程卸载应用程序.
我可以使用下面的代码列出所有已安装的应用程序,但我找不到通过WMI和C#远程卸载应用程序的方法
我知道我可以使用msiexec作为一个过程来做同样的事情,但我希望使用WMI解决这个问题,如果可能的话......
谢谢,Cem
static void RemoteUninstall(string appname)
{
ConnectionOptions options = new ConnectionOptions();
options.Username = "administrator";
options.Password = "xxx";
ManagementScope scope = new ManagementScope("\\\\192.168.10.111\\root\\cimv2", options);
scope.Connect();
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Product");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection queryCollection = searcher.Get();
foreach (ManagementObject m in queryCollection)
{
// Display the remote computer information
Console.WriteLine("Name : {0}", m["Name"]);
if (m["Name"] == appname)
{
Console.WriteLine(appname + " found and will be uninstalled... but how");
//need to uninstall …Run Code Online (Sandbox Code Playgroud) 我正在尝试监控本地PC的驱动器.我对两个事件感兴趣:连接驱动器(USB驱动器,CD-ROM,网络驱动器等)并断开连接.我使用ManagementOperationObserver编写了一个快速的概念证明,它部分工作.现在(使用下面的代码),我得到了各种各样的事件.我想只在连接和断开驱动器时获取事件.有没有办法在Wql查询中指定它?
谢谢!
private void button2_Click(object sender, EventArgs e)
{
t = new Thread(new ParameterizedThreadStart(o =>
{
WqlEventQuery q;
ManagementOperationObserver observer = new ManagementOperationObserver();
ManagementScope scope = new ManagementScope("root\\CIMV2");
scope.Options.EnablePrivileges = true;
q = new WqlEventQuery();
q.EventClassName = "__InstanceOperationEvent";
q.WithinInterval = new TimeSpan(0, 0, 3);
q.Condition = @"TargetInstance ISA 'Win32_LogicalDisk' ";
w = new ManagementEventWatcher(scope, q);
w.EventArrived += new EventArrivedEventHandler(w_EventArrived);
w.Start();
}));
t.Start();
}
void w_EventArrived(object sender, EventArrivedEventArgs e)
{
//Get the Event object and display its properties (all)
foreach (PropertyData …Run Code Online (Sandbox Code Playgroud) 我们目前使用WmiSet从网上联系到远程机器上运行的WMI查询和查询注册表设置.
问题是它只支持Delphi直到RAD Studio 2007.
我们目前正在升级到Delphi XE,需要知道是否有人知道 - 或者有 - 更新版本的WmiSet组件或类似的东西.
我们已尝试与供应商联系,但到目前为止,我们的任何查询都没有任何回复.
在我的应用程序中,我想看看Windows 7是否被激活.要清楚,我不想检查窗户是否是正品.我使用下面的代码,在这里找到http://www.dreamincode.net/forums/topic/166690-wmi-softwarelicensingproduct/
执行查询所需的时间约为5-10秒.反正有没有减少所需的时间?或者另一种检查winows 7是否被激活的方法?
public string VistaOrNewerStatus(){
string status = string.Empty;
string computer = ".";
try
{
//set the scope of this search
ManagementScope scope = new ManagementScope(@"\\" + computer + @"\root\cimv2");
//connect to the machine
scope.Connect();
//use a SelectQuery to tell what we're searching in
SelectQuery searchQuery = new SelectQuery("SELECT * FROM SoftwareLicensingProduct");
//set the search up
ManagementObjectSearcher searcherObj = new ManagementObjectSearcher(scope, searchQuery);
//get the results into a collection
using (ManagementObjectCollection obj = searcherObj.Get())
{
MessageBox.Show(obj.Count.ToString());
//now loop …Run Code Online (Sandbox Code Playgroud) 在以下代码中:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
using System.Diagnostics;
namespace Test
{
class Program
{
static void Main(string[] args)
{
string javaProcWql = string.Format("SELECT ProcessId, Name, CommandLine FROM Win32_Process WHERE Name = '{0}' AND CommandLine LIKE '%{1}%'", "firefox.exe", "firefox");
ManagementObjectSearcher mos = new ManagementObjectSearcher(javaProcWql);
foreach (ManagementObject mo in mos.Get())
{
Console.WriteLine(mo["ProcessId"]);
string[] userinfo = new string[2];
mo.InvokeMethod("GetOwner", (object[])userinfo);
Console.WriteLine("ha ha --> " + userinfo[1] + "\\" + userinfo[0]);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到InvalidOperationException了消息以及异常是
"由于对象的当前状态,操作无效" …
我想知道我的播放器是DVD还是CD播放器......
我试过了 :
SELECT Drive, MediaType, Caption FROM Win32_CDROMDrive
Run Code Online (Sandbox Code Playgroud)
MediaType 在XP上不起作用,在Seven上也不是很好.
我尝试在MediaType中找到一台带有1个播放器(Cd Writer/DVD-ROM)的计算机(带有Windows 7)Cd Writer.
二解决方案:
如果我找到"DVD",我在"标题"中搜索
我尝试了一个软件(SIW - Windows的系统信息)和我的播放器属性:
能力:
CD阅读器:CD ROM,CD R,CD RW
CD刻录机:CD R,CD RW
DVD阅读器:DVD ROM,DVD R,DVD RW,DVD RAM
DVD编剧:没有
SMART支持:否
所以,我想知道:使用WMI查询(或其他解决方案,我使用C++),我是否可以拥有相同的信息?
如果可以的话会很棒!如果我不能,我只保留我的"字符串解析".
我想在远程机器上搜索文件.我不知道EXACT文件路径,但我知道它在C:\ Windows\System下
我的查询在WMI中是这样的
string querystr = "SELECT * FROM CIM_DataFile Where Path='C:\\Windows\\System'";
ObjectQuery query = new ObjectQuery(querystr );
ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Scope, query);
Run Code Online (Sandbox Code Playgroud)
我得到无效的查询错误.
查询有效吗?有什么方法可以指定Path Under吗?
Deos是否有人知道在C++中获取给定WMI类中每个可用属性的完整列表?我在SO上发现了一些类似的问题,但它们都使用Powershell,VB或C#.
我正在枚举使用WMI安装的应用程序,而无论我如何构造它,此块都需要花费较长的时间才能完成。每次在我的环境中花费13秒。有没有更好(更快)的方法来检查程序是否已安装?(我使用iTunes作为示例程序进行检查)
private static string Timestamp
{
get { return DateTime.Now.ToString("HH:mm:ss.ffff"); }
}
private static void LoadInstalledPrograms()
{
List<string> installedPrograms = new List<string>();
Console.WriteLine("0 - {0}", Timestamp);
ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_Product");
Console.WriteLine("1 - {0}", Timestamp);
ManagementObjectCollection managementObjectCollection = mos.Get();
Console.WriteLine("2 - {0}", Timestamp);
foreach (ManagementObject mo in managementObjectCollection)
{
installedPrograms.Add(mo["Name"].ToString());
}
Console.WriteLine("3 - {0}", Timestamp);
Console.WriteLine("Length - {0}", installedPrograms.Count);
}
Run Code Online (Sandbox Code Playgroud)
选择*从Win32_Product
0 - 08:08:51.3762
1 - 08:08:51.3942
2 - 08:08:51.4012
3 - 08:09:04.8326
Length - 300
Run Code Online (Sandbox Code Playgroud)
SELECT …
如何查找共享路径的本地路径。
我的共享路径是 \\somemachine\shared\scripts\testing
它的本地路径是 D:\myshares\scripts\testing
谢谢!