为什么枚举已安装的 MSI 包如此慢?

2023-12-10

这是此的后续question.

我使用这个稍微修改过的脚本来枚举所有已安装的 MSI 包:

strComputer = "."

Set objWMIService = GetObject("winmgmts:" & _
    "{impersonationLevel=impersonate}!\\" & _
    strComputer & _
    "\root\cimv2")

Set colSoftware = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_Product")   

If colSoftware.Count > 0 Then
    For Each objSoftware in colSoftware
        WScript.Echo objSoftware.Caption & vbtab & _
        objSoftware.Version
    Next
Else
    WScript.Echo "Cannot retrieve software from this computer."
End If

然而,令人惊讶的是其糟糕的表现。枚举 XP 机器上已安装的 34 个 MSI 软件包需要 3 到 5 分钟!

相比之下,旁边的 Linux 机器需要 7 秒才能枚举 1400+ RPM...sigh

这有什么线索吗?


极其缓慢是枚举 Win32_Products 的一个已知/常见问题

如果您需要替代解决方案,请考虑使用“卸载”注册表项构建您自己的产品列表(如问题答案之一所建议)原问题你提到)。

枚举卸载的一些一般参考:

  • TechNet VBScript 示例:列出已安装的软件
  • 微软知识库:如何枚举计算机上可以卸载的软件产品

并做到这一点remotely,使用WMI注册表类,标准监管协议。 TechNet 甚至方便地提供了一个使用 StdRegProv 来完成您想要的事情的简单示例:如何列出给定计算机上所有已安装的应用程序

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么枚举已安装的 MSI 包如此慢? 的相关文章

  • App.Config 应该是应用程序的伴随文件还是放在自己的组件中?

    当我创建 Windows Installer 程序包 例如使用 WiX 并安装该应用程序时App exe以及App exe config配置文件应该有自己的组件还是应该是应用程序可执行文件的伴随文件
  • MSI 安装程序自定义操作身份问题

    我正在创建一个在数据库上执行脚本的自定义操作 问题是 connectios 使用集成安全性 因此当我尝试打开连接时出现错误 用户 Domain ComputerName 登录失败 当我检查自定义操作的身份时 使用System Securit
  • 如何确定现有应用程序的安装范围?

    我有一个基于的安装程序WixUI Advanced允许用户选择安装范围 每个用户或机器范围 升级时 安装了较低版本的现有应用程序 我想隐藏安装范围屏幕并自动选择他们上次选择的安装范围 如何判断先前安装使用的安装范围 Edit 查看我的 MS
  • “应用变换时出错。验证指定的变换路径是否有效”的根本原因是什么?

    我有 MSI 安装程序 我正在使用 PowerShell 脚本安装和卸载它 当我卸载它时 我在 Azure 上创建的 Windows 2008 2016 服务器上收到以下错误 应用变换时出错 验证指定的转换路径是否有效 如果我使用非 Azu
  • 使用 Visual Studio 安装项目设置 InstallPath 注册表项

    我正在使用使用 Visual Studio 安装项目设计的 msi 安装程序来部署我的应用程序 如何将注册表项设置为应用程序的安装路径 实际上 当我在寻找同样的东西时 还提到了以下解决方案 在注册表项中使用 TARGETDIR
  • 如何使用自定义操作在 WiX 中运行脚本 - 最简单的示例?

    WiX新手问题 我该怎么办1 将一次性 shell 脚本与安装程序一起复制到 temp e g
  • Windows 安装程序和安装应用程序合并到一个文件中?

    我使用 Visual Studio 在 C 中编写了一个应用程序 我创建了一个项目设置文件 该文件在我的调试中为我创建了文件 Windows Installer 和安装应用程序都是必需的 但我想将它们合并为一个 就像当您下载应用程序时 安装
  • 使用 ManagementObjectSearcher 时检测到 DisconnectedContext

    我在 WndProc 覆盖中使用以下函数 Public Function GetPortName As String Dim portNameData As String Dim comPortNumber As String Try Di
  • 无法获得 S.M.A.R.T.外部驱动器的信息

    我正在尝试获取外部 USB 驱动器的 SMART 信息 我使用以下查询来获取驱动器的温度 但是该查询始终返回集合中的单个对象 即我的内部 HDD ManagementObjectSearcher searcher new Managemen
  • WiX - 通过检查修订来防止降级

    我正在寻找一种方法来防止我的应用程序降级 但 问题 是 我必须检查修订号 例如 安装 1 0 0 1 时应该可以安装 1 0 0 2 但安装 1 0 0 2 时不应该安装 1 0 0 1 我知道 Element MajorUpgrade 仅
  • wix 3 安装程序:未解析的绑定时变量!(bind.fileVersion.Name.exe)

    我正在尝试使用 Wix3 中的绑定 bind fileVersion 即 3 11 1 由于某些原因 我收到以下错误消息 未解析的绑定时变量 bind fileVersion TestWix3 exe 我的目标是填写 产品 ID 行 特别是
  • Wix - 自定义安装目录

    我使用的是 Wix 3 x 用户应该能够选择目标目录 我的Setup wxs目前是这样的 http pastebin com uH1EjbDQ http pastebin com uH1EjbDQ 询问用户自定义目标目录的最简单方法是什么
  • Python:获取USB闪存驱动器设备的名称[windows]

    我正在尝试编写一个小程序 它将能够读取有关 REMOVEABLE DEVICE USB 的一些信息 我试过了pyusb https github com walac pyusb但我无法提取我需要的数据 我想从系统中读取 USB 设备的名称
  • 捕获数据包后会发生什么?

    我一直在阅读关于网卡捕获数据包后会发生什么的内容 我读得越多 我就越困惑 首先 我读过传统上 在网卡捕获数据包后 它会被复制到内核空间中的一个内存块 然后复制到用户空间 供随后处理数据包数据的任何应用程序使用 然后我读到了 DMA 其中 N
  • 对 .NET Windows 安装程序应用程序执行注册表搜索

    我有一个 NET winform 安装程序应用程序 在安装之前 我会进行注册表搜索以检查计算机上是否安装了 MS Access Runtime 搜索目标机器 搜索目标机器的属性 启动条件 启动条件的属性 但是我想避免对路径进行硬编码 例如
  • WMI 不返回 Windows 7 64 上的所有安装程序

    今天 我们尝试使用以下脚本列出每个虚拟机上所有已安装的程序来查询 WMI 我们发现它会列出所有 64 位应用程序 以及一些 32 位应用程序 但并非所有应用程序 32 位 64 位 都会列出 param string ExportPath
  • 在 WiX 中轻量运行时,DefaultDir 无效

    我只是想做一个安装程序 将一些文件移动到程序文件中 设置开始菜单链接 并出现在要卸载的添加 删除程序中 目前我很乐意点击开始菜单链接 因为这看起来相对简单 需要注意的是 我特别希望可以通过脚本构建它without任何类型的全局安装 这意味着
  • 手动创建 msix 包,无需 GUI 或 msi 安装程序

    谁能给我提示如何手动定义 msix 包 我的应用程序还没有 msi 包 所以我不能简单地转换它 有没有一种方法可以像配置文件一样创建 我可以手动定义哪些文件需要进入 msix 包 MSIX GUI Creator 也没有给我足够的控制权 非
  • 从 C# 调用 MsiEnumRelatedProducts 崩溃

    我在从 C 调用 MsiEnumRelatedProducts 时遇到了无穷无尽的麻烦 我尝试了 p invoke 定义的几种变体 但没有成功 out 和 ref 我认为问题在于最后一个参数 它是一个 LPTSTR 应该指向一个 39 个字
  • 使用 cx_Freeze 创建 MSI 时可用的 bdist_msi 选项

    我无法找到有关可用选项的文档bdist msi使用以下命令创建 MSI 时的命令cx Freeze设置脚本 我在与此主题相关的其他 SO 帖子中看到了以下选项 bdist msi options data add to path initi

随机推荐

  • 如何在助手中访问小部件数据

    在我的前端助手中 我使用一个参数并将其提供给所有的 data widget 是否可以在帮助程序上下文中访问 data widget 我只找到了 self output 对象树 但我认为这不是一个高质量的解决方案 Thanks 编辑代码示例
  • 无法让 Twitter OAuth 回调身份验证在 Cocoa 应用程序中工作

    我正在使用 MGTwitterEngine 和 OAuthConsumer 框架 并且主要遵循以下说明使用OAuth消费者 为了使用 OAuth 并且不让用户处理基于 oob PIN 的身份验证 您需要启用对应用程序的回调 要在桌面 或 i
  • 如何识别窗口服务中的登录事件

    我有一个 Windows 服务 可以获取用户详细信息并将结果保存到日志文本文件中 而且 我的问题是当我注销系统并再次登录时 即无需重新启动机器 我还想将登录系统的时间节省到该日志文件中 如何在窗口服务中编写登录事件 请帮助评论 我使用了下面
  • 在 Tornado 中“超时”请求的正确方法

    我设法编写了一个相当愚蠢的错误 该错误将使我的一个请求处理程序运行非常慢的数据库查询 有趣的是 我注意到即使在围攻完成很久之后 Tornado 仍然在不断地处理请求 有时是 90 年代后 评论 gt 我不是 100 确定 Siege 的工作
  • 在另一个线程中创建 WPF 元素

    我可以在不同的线程上运行 2 个或更多 WPF 窗口 问题是现在我的应用程序分割在许多窗口中 我真正想要的是有一个主窗口包含一个网格 其中每个单元格都包含由不同线程管理的元素 是否可以创建一个由不是管理父窗口 包含窗口的线程管理的 UIEl
  • 按键升序对数组进行排序,并将“粘性”键指定为第一个

    我有一个多维数组 array array B gt array Banana Yello O gt array Orange Orange A gt array Apple Green S gt array Strawberry Red o
  • 在有内容的页面上触发文件下载

    我见过许多网站在包含现有 HTML 内容的页面上触发文件另存为对话框 他们如何做到这一点 我知道如何设置正确的标题 例如内容处置等 但是当我这样做时 页面的内容不会加载 并且立即触发文件下载 创建一个常规 HTML 页面 然后添加一个 ME
  • JavaScript:使值对数组形成值数组

    有没有一种优雅 实用的方法来转换这个数组 1 5 9 21 进入这个 1 5 5 9 9 21 我知道我可以forEach数组并收集值以创建一个新数组 有没有一种优雅的方式来做到这一点 lodash不使用forEach 您可以映射一个拼接数
  • 向JTable添加加载循环

    我有一个从数据库加载数据的 JTable 因为有时数据太多 我想在Jtable内添加一个加载圆圈来通知用户数据正在加载 这是我希望的图像 这可能吗 在 Swing 中如何实现呢 PS 我不想使用进度条 我只想使用表格内的圆圈 UPDATE
  • 为什么在 LIKE 过滤器中使用下划线字符会给出所有结果?

    我写了下面的 SQL 查询LIKE健康 状况 SELECT FROM Manager WHERE managerid LIKE AND managername LIKE In the LIKE我想搜索任何下划线 但我知道我的列数据没有下划线
  • 使行延伸到 CSS 网格中的所有列

    尽管我已经指定了我希望导航延伸到哪些列 但我一直无法让我的导航完全延伸到我的列上 如果您可以看一下我的代码并指出我的错误太棒了 这是浏览器中 HTML 文件的图像 body margin 0 padding 0 container max
  • 将 datetimepicker 连接到 angularjs

    我需要使用 Angular Bootstrap 创建一个包含日期和时间的输入字段 我找到了这个日期时间选择器它看起来正是我需要的 一个字段中的日期和时间 并阻止用户错误的版本 我写了一个指令 datepickers 启动了 但它改变了视图
  • 为什么分配给 True/False 不能按我的预期工作?

    作为回答另一个问题的一部分 我编写了以下代码 乍一看其行为似乎很奇怪 print True outputs true True False print True outputs false True True print True outp
  • 谷歌地图反应没有出现

    我正在尝试使用google map react 但是当我尝试渲染它时 什么也没有出现 我错过了什么吗 import GoogleMap from google map react import React Component from re
  • 如何在Google App Engine中导入Google Cloud语音识别(python)

    我想在我的 Google App Engine python 应用程序上使用 google cloud 库 自从我在本地安装了这个库以来 我的所有测试都在我的本地工作 我原以为 GAE 默认支持它 但它是不支持 这是我得到的错误 from
  • 如何使用 Selenium RC 来验证我们的服务器端重定向(301、302)?

    我们的 Apache 配置中有很多重定向 我想用 Selenium 自动测试重定向 这导致我遇到了一些问题 调用 URL 但在重定向页面上断言 重定向后检查浏览器的URL 检查响应标头 以确定重定向类型 301 302 也许 Seleniu
  • 如何从一个类运行多个控制台?

    我有三个课程 它们都有不同的作品 但我需要一起运行它们 当我在一个类中运行所有这些时 我只得到一个控制台 并且无法更改此控制台 我想要的是在一个类中运行它们并查看每个控制台 我怎样才能做到这一点 更清楚地说 when I run first
  • 类型擦除的通用包装器是如何实现的?

    我需要为我自己的结构实现一个类型擦除包装器 非常类似于SequenceOf GeneratorOf等等 所以我开始尝试重新实现标准SequenceOf myself 我刚刚复制并粘贴了声明SequenceOf 将其重命名为MySequenc
  • 无法访问 Android 中的传感器

    我正在编写一个指南针应用程序 但由于某种原因无法访问所需的传感器 我已经实施了SensorEventListener以这种方式连接并注册我的传感器 sensorManager SensorManager getSystemService C
  • 为什么枚举已安装的 MSI 包如此慢?

    这是此的后续question 我使用这个稍微修改过的脚本来枚举所有已安装的 MSI 包 strComputer Set objWMIService GetObject winmgmts impersonationLevel imperson