使用WMI远程卸载应用程序

2024-04-02

我正在尝试编写一个迷你 w32 可执行文件来使用 WMI 远程卸载应用程序。

我可以使用下面的代码列出所有已安装的应用程序,但我找不到通过 WMI 和 C# 远程卸载应用程序的方法

我知道我可以使用 msiexec 作为进程来执行相同的操作,但如果可能的话,我希望使用 WMI 来解决这个问题...

谢谢, 水泥

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 this app...
        }
    }

}

看一下(来自 Microsoft 的免费工具)— 它可以为您生成各种语言的 WMI 代码,包括 C#。

这是一个示例,说明了Win32_Product.Uninstall方法的使用。您需要知道要卸载的应用程序的 GUID、名称和版本,因为它们是应用程序的关键属性Win32_Product class:

...

ManagementObject app = 
    new ManagementObject(scope, 
    "Win32_Product.IdentifyingNumber='{99052DB7-9592-4522-A558-5417BBAD48EE}',Name='Microsoft ActiveSync',Version='4.5.5096.0'",
    null);

ManagementBaseObject outParams = app.InvokeMethod("Uninstall", null);

Console.WriteLine("The Uninstall method result: {0}", outParams["ReturnValue"]);

如果您有有关应用程序的部分信息(例如只有名称或名称和版本),您可以使用SELECT查询得到对应的Win32_Process object:

...
SelectQuery query = new SelectQuery("Win32_Product", "Name='Microsoft ActiveSync'");

EnumerationOptions enumOptions = new EnumerationOptions();
enumOptions.ReturnImmediately = true;
enumOptions.Rewindable = false;

ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query, options);

foreach (ManagementObject app in searcher.Get())
{
    ManagementBaseObject outParams = app.InvokeMethod("Uninstall", null);

    Console.WriteLine("The Uninstall method result: {0}", outParams["ReturnValue"]);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用WMI远程卸载应用程序 的相关文章

随机推荐

  • fortran 77 到 fortran 90 的转换器软件 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有 fortran 77 编码 但我想转换为 fortran 90 在哪里可以下载转换器软件 这是我帮
  • Pandas json_normalize 因 JSON 中的空值而失败

    我有以下从外部网络服务获得的 json text id 1 name abc address flat 123 city paris street null error null 现在我想从这个 json 创建数据框 当我尝试下面时 fro
  • 无法解析模块ReactNativeEventEmitter

    将 React Native 从 0 29 升级到 0 30 后 我收到此错误消息 我多次删除了node modules 然后再次安装它们 清除了watchman缓存并npm start reset cache 我也在新项目上尝试过使用re
  • 将日期传递给 package.json 脚本

    我有一个正在尝试设置的部署脚本 我正在尝试将名为 DEPLOY DATE 的环境变量设置为等于现在 scripts deploy kubectl set env deploy api DEPLOY DATE date 问题是这只是将 DEP
  • 在linux中找不到syscall_table_32.S文件

    我正在使用linux headers 2 6 32 21虚拟机上的包 我要编写一个新的系统调用 我找到了其他文件来写入系统调用的缩写 但我找不到这个syscall table 32 S in arch x86 kernel 目录 请帮助我如
  • 将日期 yyyyMMdd 转换为 system.datetime 格式[重复]

    这个问题在这里已经有答案了 可能的重复 如何将日期从 yyyyMMdd 格式转换为 mm dd yyyy 格式 https stackoverflow com questions 4712335 how to convert date fr
  • 如何通过点击JButton来添加JPanel?

    我正在尝试创建一个小型 GUI 它有 2 个 JButtons 和 2 个 JPanels 每个 JPanels 上都有一些绘图动画 默认情况下 它必须显示第一个 JPanel 通过单击第二个 JButton 我想看到第二个 JPanel
  • 无法读取未定义的属性“thisCompilation”-react-scripts-ts

    我使用以下说明创建了一个完全空白的新项目 https developer microsoft com en us fabric get started https developer microsoft com en us fabric g
  • 在 Tensorflow 模型中添加低层

    尝试开发一些转移学习算法 我使用一些经过训练的神经网络并添加层 我正在使用 Tensorflow 和 python 在 Tensorflow 中使用现有图似乎很常见 导入图 例如使用元图 然后通过添加节点来设置新的高层 例如 我找到了这段代
  • 意外标记“(”附近出现语法错误

    下面是我的代码 它一直告诉我第 10 行导致了这个 意外标记 附近的语法错误 但我不明白为什么 我正在添加到已经编写的代码中 但它说有的部分错误不是我添加的内容的一部分 所以我对为什么会收到此错误感到非常困惑 此外 我想要一个关于此错误实际
  • 具有 2 个不同 .pem 密钥的 2 个服务器之间的 scp 命令

    我想使用 scp 和 2 个不同的 pem 密钥将文件夹从服务器 A 传输到服务器 B 这是最好的方法吗 它是否真的有效 scp i Documents server1 pem r email protected cdn cgi l ema
  • 在提取/替换操作期间保留对象属性的方法

    最近我在我的R代码中遇到了以下问题 在接受数据框作为参数的函数中 我需要添加 或替换 如果存在 一列 其中包含根据数据框原始列的值计算的数据 我编写了代码 但测试显示数据框提取 替换操作 我用过 结果是对象的特殊 用户定义 属性丢失 在意识
  • 使用 application/x-www-form-urlencoded 的 POST 请求

    后端开发人员在 POST 请求中给出了这些说明 路线 url app name controller action 控制器和操作应该是小写字母 API测试链接 http 请求应使用 POST 方法 参数应通过请求内容正文 FormUrlEn
  • 客户端语言

    我不是网络程序员 所以请原谅我的无知 当谈到服务器端编程时 我们有很多可用的技术 例如 PHP ASP net JSP 等 然而 说到客户端脚本 我只听说过 JavaScript 和 AJAX 也许您还可以包含 Java Applet 因为
  • 使用 PHP 将文件夹重命名为子文件夹

    我正在尝试通过重命名来移动文件夹 test1 和 test2 文件夹均已存在 rename test1 test2 xxx1 xxx2 我得到的错误是 重命名 没有这样的文件或目录 我认为这是因为目录 xxx1 不存在 我怎样才能移动 te
  • 大多数编译器都会优化 MATMUL(TRANSPOSE(A),B) 吗?

    In a Fortran program I need to compute several expressions like M v MT v MT M M MT etc Here M and v are 2D and 1D arrays
  • Scala:==默认等于吗?

    我正在阅读 Scala 编程 它说 您可以重新定义的行为 通过覆盖新类型equals方法 始终从类继承Any 继承的equals除非被覆盖 否则它是对象标识 就像 Java 中的情况一样 所以equals 随之而来的是 默认情况下与eq 但
  • 发布有关 Ektron 问题的最佳在线网站是什么?

    我正在尝试使用 Dotnet 在 Ektron 中做一个新项目 我发现数量相当少 stackoverflow 中发布的问题及其答复 最好的网站是什么 消除我在使用 Ektron 进行开发时的疑虑 谢谢 同意 zkent 但有额外的建议 发布
  • 尝试使用 Fluent NHibernate 调用存储过程时出现命名查询未知错误

    我正在为一个项目设置 NHibernate 并且有一些疑问 由于它们的复杂性 我们将保留为存储过程 我希望能够使用 NHibernate 来调用存储过程 但遇到了一个我无法弄清楚的错误 由于我使用的是 Fluent NHibernate 所
  • 使用WMI远程卸载应用程序

    我正在尝试编写一个迷你 w32 可执行文件来使用 WMI 远程卸载应用程序 我可以使用下面的代码列出所有已安装的应用程序 但我找不到通过 WMI 和 C 远程卸载应用程序的方法 我知道我可以使用 msiexec 作为进程来执行相同的操作 但