使用 msiexec 卸载应用程序时是否有 GUID 的替代方案?

2024-06-22

目前,我们在运行包含 msiexec 的卸载脚本时使用 GUID 来识别应用程序。我遇到的问题是每次安装最新版本的应用程序时 GUID 都会发生变化,所以我想知道是否有其他方法可以识别使用 msiexec 运行的应用程序?


首先:应用程序新版本的产品 G​​UID 发生变化是正常现象,尽管也可以在不更改产品 GUID 的情况下升级某些应用程序(称为小升级 https://msdn.microsoft.com/en-us/library/windows/desktop/aa370037(v=vs.85).aspx- 相对于主要升级 https://msdn.microsoft.com/en-us/library/windows/desktop/aa369786%28v=vs.85%29.aspx更改产品 GUID)。同一产品的不同版本之间往往保持稳定的是升级代码(它定义了一系列相关产品)。 ProductCode 唯一标识产品(在特定版本中)。

这里列出了一些卸载选项:从命令行卸载 MSI 文件而不使用 msiexec https://stackoverflow.com/questions/450027/uninstalling-an-msi-file-from-the-command-line-without-using-msiexec/1055933#1055933.

我想您可以使用 MSI 文件名,如下所示section 3,或者如果产品名称保持稳定,您可以将其与自动化一起使用来查找正确的产品 G​​UID 以卸载有问题的产品。我稍后会对此进行测试并更新答案。


UPDATE:一个通过“产品名称”卸载产品的示例 VBScript(假设它在各个版本中保持不变,通常会这样做,但不能保证 - 这取决于产品)。

在“添加/删除程序”中找到产品名称 - 或使用本答案底部链接的小 VBScript 导出一个小文本文件,其中包含所有已安装软件包的信息。

' On Error Resume Next ' Used to suppress errors

Const msiUILevelNone = 2
Const msiUILevelFull = 5
Const msiInstallStateAbsent = 2

Set installer = CreateObject("WindowsInstaller.Installer")
Set products = installer.ProductsEx("", "", 7)
installer.UILevel = msiUILevelFull  ' Running with full GUI (if available in MSI)
' installer.UILevel = msiUILevelNone ' Will run uninstall silently, run script with admin rights

' Get the product name from the user
productname = InputBox("Please enter the product name for the MSI package you wish to uninstall:")
If productname = vbCancel Or Trim(productname) = "" Then
   WScript.Quit(0)
End If    

' Iterate over all MSI packages on the box
For Each product In products

   currentproduct = product.InstallProperty("ProductName")

   If LCase(currentproduct) = LCase(productname) Then

      installer.ConfigureProduct product.productcode, 0, 2 ' msiInstallStateAbsent
      MsgBox "Ran uninstall for: " & currentproduct
      Exit For ' End product iteration, assuming only one product needed uninstall

   End If 

Next

Set installer = Nothing

MsgBox "Finished."

UPDATE:您可以使用 VBScript 为自己创建产品代码和产品名称的快速列表,如本答案底部所述:如何找到已安装的 MSI 设置的产品 G​​UID? https://stackoverflow.com/questions/29937568/how-can-i-find-the-product-guid-of-an-installed-msi-setup/29937569#29937569。我认为这个特定的 VBScript 非常简单。

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

使用 msiexec 卸载应用程序时是否有 GUID 的替代方案? 的相关文章

  • 如何使用 powershell 重命名 blob 文件

    看似简单的任务 我只想重命名一个 blob 文件 我知道我必须复制它来重命名或执行其他操作 然后删除原始文件 但这很棘手 我已经创建了存储上下文 New AzureStorageContext 并获取了 blob Get AzureStor
  • 如何从 .ps1 文件运行 powershell 脚本?

    我正在尝试自动执行一个简单的 PS 脚本 以删除某个 txt 文件 显然 我是 powershell 新手 当我在 shell 中运行代码时 它工作完美 但是当我将代码保存为 ps1 并双击它 或远程执行它 时 它只是弹出一个窗口 什么也不
  • 在 PowerShell 中返回具有单个元素的数组

    这应该非常简单 我需要从函数返回哈希表数组 当有多个哈希表时 这是有效的 但当只有一个哈希表时 结果不是数组 我不想测试结果是否是数组 function GetArrayWith1Hashtable array hashtable hash
  • Copy-Item 将目录及其内容复制到 UNC 路径

    我正在尝试使用 PowerShell 1 0 获取文件夹的内容并将其复制到另一个文件夹 非常简单的东西 使用起来一切都很好Copy Item from to recurse如果我从本地文件夹复制到本地文件夹 然而 如果 to变量是一个UNC
  • 使用 powershell 获取 Azure DevOps 服务连接服务主体 ID

    我正在致力于自动化 Azure Active Directory 应用程序注册和 Azure Devops 服务连接 但遇到了困难 我想通过服务主体 ID 查询 Azure DevOps 服务连接 服务端点 或至少获取 ID 使用 Azur
  • 基于团体成员资格的额外输出

    我希望你们都度过愉快的一天 如果这是一个糟糕的问题尝试 我提前道歉 我不太擅长这个 介绍 首先 我想介绍一下我实际正在创作的内容 我为 MSP 工作 我的任务是创建一个供我们的一位客户使用的用户管理 Powershell 脚本 以便我们可以
  • Powershell脚本为用户创建主文件夹并设置权限

    我正在做一个 powershell 脚本 它在 AD 中创建新的域用户帐户 并在文件服务器中创建具有相关权限的主目录 我的问题是我无法获得权限设置 在下面的代码中 my fileServer是文件服务器名称 sso 表示单点登录 id 在下
  • WiX - 安装 Windows 服务并授予权限

    我们需要授予用户启动 停止和查询已安装服务状态的权限 在 WiX 2 0 中 这个 xml 可以工作
  • 一键安装 Safari 扩展

    当用户下载插件 Firefox 例如 时 下载完成后插件安装就会开始 在 Safari 中是否有可能实现同样的目标 即用户单击链接下载插件 下载后会自动开始安装 我认为这不可能在任何其他域上执行 除了extensions apple com
  • Windows 安装程序 (C#) 错误代码 2869

    我在 VS 2005 中有一个项目 其中有一个控制台应用程序和一个与安装该应用程序关联的安装项目 我在控制台应用程序中还有一个安装程序类 安装项目将使用它在安装前进行一些验证 这些任务正在检查数据库连接字符串并检查某些目录位置以确保它们在安
  • Powershell命令Publish-AzWebApp未发布应用程序

    我有一个 Net 6 Web API 应用程序 我可以通过 Visual Studio 2022 将其发布到 Azure 应用程序服务 然后使用该应用程序 现在我想自动化它 我的 powershell 创建了一个 zip 文件 其中包含所有
  • 在 PowerShell 中的屏幕和文件中显示输出

    我怎样才能让所有这些不仅输出在屏幕上 而且保存到文本文件中CSV http en wikipedia org wiki Comma separated values format OUs Get ADObject LDAPFilter ob
  • 使用Powershell的按位运算符

    我正在寻找如何解决以下场景的示例 想象一下我的打印机具有以下 状态 属性0 离线2 纸盘已空4 墨粉耗尽8 卡纸 当我查询状态时 它返回值 12 我可以明显看到这意味着打印机碳粉耗尽且卡纸 但我如何使用 Powershell 解决这个问题
  • 如何在 PowerShell 中将 5.7303333333e+02 等字符串转换为十进制?

    我正在尝试转换字符串 例如5 7303333333e 02 to the decimal类型 我尝试过使用 decimal TryParse但返回值是假的 有没有类似的方法 datetime parseexact 或任何干净的方法来转换这些
  • 我怎么知道PowerShell函数参数被省略了

    考虑这样的函数 function Test foo bar 我们可以称之为 Test foo null Test 我如何知道何时省略了 foo 以及何时为 null 如果您使用的是 Powershell V2 或更高版本 则可以使用 PSB
  • 有选择地格式化 PowerShell 管道中的数据并输出为 HTML 的技术

    假设您想要对 powershell 的某些表格输出进行一些奇特的格式化 并且目标是 html 用于网络服务器 或者通过电子邮件发送 举例来说 您希望某些数值具有不同的背景颜色 任何 我可以想到两种可靠的编程方法来实现此目的 输出 XML 并
  • 如何使用 msilib 从 python 模块创建 .msi 文件的示例

    谁能给我一个如何使用 python 的例子msilib http docs python org library msilib html标准库模块从自定义 python 模块创建 msi 文件 例如 假设我有一个名为 Cool py 的自定
  • 合并两个 json 对象

    我有以下输入 2 个 json 文件 第一个是基本文件 第二个包含相同的属性但不同的值 我想合并这些对象 例如 a b asda c asdasd 第二个文件 a b d 结果应该是这样的 a b d c asdasd 用powershel
  • 如何在 Inno 安装脚本的 [Code] 部分设置状态消息?

    我知道StatusMsg只能在 运行 选项中使用 我想在 Code 选择 请帮我解决这个问题 提前致谢 问候塞缪尔 J 您可以使用以下命令在运行时更改状态标签内容 WizardForm StatusLabel Caption Intalli
  • PowerShell - 提示“您想继续吗”

    我有一个脚本用于自动化 WSUS 进程 它的最后阶段继续删除所有旧的 不必要的文件 对象 我想在清理阶段之前提示 按 输入 继续删除或按任何其他键停止 以便人们可以选择不运行它 我目前在脚本末尾的代码在这里 Get WsusServer 1

随机推荐

  • Ruby 中救援的替代方案?

    好像我有begin rescue end我的代码中到处都是语句 这似乎不是正确的做法 谁能建议我如何捕获任何异常而不必将所有内容都放在里面begin rescue end 有什么方法可以让 Ruby 闭嘴并继续前进 即使出现异常也是如此 与
  • Windbg dump 命令失败,错误为 0x8007012b

    客户正在尝试捕获挂起的小型转储 他启动 WindDbg 并成功附加到该进程 WinDbg 显示其标题 Microsoft R Windows Debugger Version 6 11 0001 404 AMD64 Copyright c
  • 使用 jsoup 和 proguard 关闭强制关闭

    编辑 我的 PROGUARD 版本是 4 7 今天我尝试包括jsoup version 1 7 1 在我的android应用程序中 但这给我带来了很多麻烦 当我导出签名的apk with proguard 打开每当我的应用程序面临强制关闭问
  • 使用嵌套 if 子句向量化循环

    Problem 我正在尝试优化代码的运行时 并且之前曾提出过类似的问题 其中包括几个嵌套的 if 语句 向量化嵌套 if 语句 https stackoverflow com questions 38125770 vectorizing n
  • 如何在 WordPress 中使用 domPDF

    所以我想在我的 WordPress 帖子上有一个按钮 可以将帖子转换为 PDF 我找到了 domPDF 但我不知道如何用 WordPress 实现它 我知道使用插件会更容易 但我想不使用插件 有人可以向我解释一下如何实现这个吗 谢谢 你的问
  • 您可以通过 Dart 编辑器将编译器标志传递给 dart2js

    我想运行 no minify 构建 但不是从终端运行 我可以通过 Dart Editor IDE 本身来完成此操作吗 在 运行 gt 管理启动 下 您可以创建一个新的 Dart2js 启动并传入您想要的任何编译器标志
  • Angular 2 — 浏览网页,无需重新加载这些页面常用的组件

    您可以在这里找到一个示例应用程序 http ivan khludov com http ivan khludov com 这是我的根组件 import Component from angular core Component select
  • Sharepoint 列表转 PDF 报告

    我有一个 SharePoint 列表 我需要将其转换为文档 任何类型 并将其导出为 PDF 您对执行此操作的最佳方法有什么建议吗 我有 Crystal Reports 但不确定这是否是正确的用例 您可以使用对象模型或通过 Web 服务以编程
  • 如何配置 VS Code 的集成终端以使用正确的 Python 解释器

    TL DR 这个问题是NOT询问如何选择Python解释器此外 还可以运行或调试代码 这个问题是NOT询问任何有关的事情虚拟环境 或者如何激活虚拟环境 所有这些都在起作用 我觉得值得注意的是 下面的问题之前已经被问过 但由于对所问内容的困惑
  • 如何判断您的选择查询是否在事务内?

    在 Django 1 5 x 中 我有一个长时间运行的管理命令 其中选择查询返回过时的数据 我怀疑这是因为它们在数据库连接上较早启动的事务中运行 有没有办法判断查询是在事务中运行还是处于自动提交模式 这是我之前发布的问题的更集中的版本htt
  • bootstrap表格边框删除水平线

    我想删除引导程序表格边框的水平线并保留垂直线 我尝试了很多解决方案并做了很多研究 但我仍然找不到解决方案 div class container div class row div class col md 12 table class t
  • SQL Server Management Studio SSMS 尝试“保存到文件”而不是在 F5 上执行

    这种情况间歇性地发生 似乎与意外敲击按键有关 有什么想法导致这个吗 听起来您好像不小心从 结果到网格 的默认查询选项更改为 结果到文件 如果是这种情况 很容易修复 从查询菜单 gt 结果到 gt 结果到网格 OR 按 Ctrl D 尝试上述
  • 错误:分配关联数组时必须使用下标

    我想要 bash 中的哈希图等效项 键为string和价值观作为list的整数 所以 我写了下面的代码 declare A PUBS PUBS FEE 345 342 FOO 1 2 44 BAR 23 67 但是 我收到一条错误消息mus
  • 当响应为带有位置标头的 303 时,防止 xhr 重定向

    我收到带有位置标头的 303 响应 如何防止 XMLHttpRequest 重定向 下面是代码 var xhr new XMLHttpRequest xhr open GET api v1 test e target data machin
  • Ajax Jquery 调用重定向

    我是 ajax 的新手 我知道有人已经遇到过这个问题 我有一个基于 Spring MVC 构建的遗留应用程序 它有一个拦截器 过滤器 可以将用户重定向到登录 每当没有会话时页面 public class SessionCheckerInte
  • 哪个 Python 模块适合列表中的数据操作?

    我有一个 x y 和 z 坐标序列 需要对其进行操作 它们位于三个元组的一个列表中 例如 x1 y1 z1 x2 y2 z2 我需要加法 乘法和对数来处理我的数据 我想研究一个像 awk 语言一样强大的模块 我不确定你到底在追求什么 您可以
  • JasmineNodeOpts - 打印量角器测试结果

    背景 我使用 Jasmine 作为 Protractor 的测试框架 我一直在使用茉莉花规格记者 https www npmjs com package jasmine spec reporter用于报告 昨天我稍微改变了我的jasmine
  • 我的 32 位头痛现在变成了 64 位偏头痛?!? (或 64 位 .NET CLR 运行时问题)

    从在 64 位 JIT 下运行与 32 位 JIT 下运行 NET 应用程序切换到在 32 位 JIT 下运行时 在性能 内存等方面发生了哪些不寻常的 意想不到的后果 我对好的事情感兴趣 但对人们遇到的令人惊讶的坏问题更感兴趣 我正在编写一
  • 如何在 ggmap 中旋转地图视图?

    我希望将 ggmap 对象内的视图从默认的 up true North 旋转到我选择的自定义角度 但在 ggmap 或 get map 中找不到该选项 目前 我有以下代码 map1 lt get map location c 78 8722
  • 使用 msiexec 卸载应用程序时是否有 GUID 的替代方案?

    目前 我们在运行包含 msiexec 的卸载脚本时使用 GUID 来识别应用程序 我遇到的问题是每次安装最新版本的应用程序时 GUID 都会发生变化 所以我想知道是否有其他方法可以识别使用 msiexec 运行的应用程序 首先 应用程序新版