自动化测试——自动卸载软件

news2024/11/18 6:19:04

  • 📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢交流讨论:欢迎加入我们一起学习!
  • 📢资源分享:耗时200+小时精选的「软件测试」资料包
  • 📢 最困难的时候,也就是我们离成功不远的时候!


在平常的测试工作中,经常要安装软件,卸载软件,  即繁琐又累。  安装和卸载完全可以做成自动化。 安装软件我们可以通过自动化框架,自动点击Next,来自动安装。  卸载软件我们可以通过msiexec命令行工具自动化卸载软件

用msiexec 命令来卸载软件

平常我们手动卸载软件都是到控制面板中的"添加/删除"程序中去卸载软件, 或者通过程序自带的卸载软件来卸载。

我们可以通过 MsiExec.exe /X{ProductCode} 命令来卸载程序。

关于MsiExec.exe 请看 Msiexec (command-line options) | Microsoft Learn

注册表中查找ProductCode

ProductCode是Windows 安装程序包的全局唯一标识符 (GUID), 我们可以通过注册表来获取ProductCode

实例:  用MsiExec.exe 自动卸载Xmarks.

Xmarks 是一个用来同步收藏夹的工具, 我平常用来同步IE,firefox,chrome的收藏夹。

先用注册表打开如下位置,

32位操作系统: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\

注意: 如果是64位操作系统:  

64位的程序还在: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\

32位的程序而是在: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\

 Uninstall下面的注册表子键很多, 你需要耐心地一个一个去查找"DisplayName", 从而找到程序的ProductCode, 如下图。

从注册表中我们找到UninstallString这个键值:  MsiExec.exe /X{C56BBAC8-0DD2-4CE4-86E0-F2BDEABDD0CF}, 那么ProductCode就是{C56BBAC8-0DD2-4CE4-86E0-F2BDEABDD0CF}

我们可以通过 MsiExec.exe /X{ProductCode} 命令来卸载程序. 

那么卸载的命令应该为 MsiExec.exe /X{C56BBAC8-0DD2-4CE4-86E0-F2BDEABDD0CF}

然后在CMD中直接调用这个命令, 会弹出一个对话框,点击"是" 后, 软件就能被卸载了。

在自动化测试中,我们不想弹出这个对话框,而是希望直接卸载。同时也不希望系统重启 只要加个两个参数 /quiet /norestart 就可以了

现在的卸载的命令是: MsiExec.exe /X{C56BBAC8-0DD2-4CE4-86E0-F2BDEABDD0CF} /quiet

C#中卸载程序

 C#的卸载代码比较简单, 当然你也可以用其他语言。

            Process p = new Process();
            p.StartInfo.FileName = "msiexec.exe";
            p.StartInfo.Arguments = "/x {C56BBAC8-0DD2-4CE4-86E0-F2BDEABDD0CF} /quiet /norestart";
            p.Start(); 

C#查找注册表中的ProductCode

最麻烦的在于,如何到注册表中获取ProductCode。 如果做非Web程序的自动化测试,经常需要跟注册表打交道。

代码为:

        public static string GetProductCode(string displayName)
        {
            string productCode = string.Empty;
          
            // 如果是32位操作系统,(或者系统是64位,程序也是64位)
            string bit32 = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
            // 如果操作系统是64位并且程序是32位的
            string bit64 = @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall";

            RegistryKey localMachine = Registry.LocalMachine;
            RegistryKey Uninstall = localMachine.OpenSubKey(bit32, true);

            foreach (string subkey in Uninstall.GetSubKeyNames())
            {
                RegistryKey productcode = Uninstall.OpenSubKey(subkey);
                try
                {
                    string displayname = productcode.GetValue("DisplayName").ToString();
                    if (displayname == displayName)
                    {
                        string uninstallString = productcode.GetValue("UninstallString").ToString();

                        string[] strs = uninstallString.Split(new char[2] { '{', '}' });
                        productCode = strs[1];
                        return productCode;                    
                    }
                }
                catch { }
            }


            return productCode;
        }

最后的分享

我这里给你们分享一下我所积累和整理的一些文档和学习资料,有需要直接领取就可以了!

以上内容,对于软件测试的朋友来说应该是最全面最完整的备战仓库了,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1253023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Harmony开发 eTs公共样式抽取

Harmony系统开发使用eTs开发过程中对于样式相同且重复使用的样式可以抽取成公共样式循环利用,类似于android的style样式。 import router from ohos.router import cryptoFramework from ohos.security.cryptoFramework; import prompt from system.prompt class L…

从零开始的RISC-V模拟器开发(一)环境搭建

前言 博主这系列文章是跟随中科院吴伟老师的b站公开课:[完结]从零开始的RISC-V模拟器开发第一季2021春季_哔哩哔哩_bilibili 记录的笔记。仅供学习使用,侵删! 苦逼的博主现在自己毕设也是要设计类似的东西。哎。我需要做的是给一个现成的 R…

【从浅识到熟知Linux】基本指令之man、uname和bc

🎈归属专栏:从浅学到熟知Linux 🚗个人主页:Jammingpro 🐟每日一句:干完饭写篇博客放松一下。 文章前言:本文介绍man、uname和bc指令用法并给出示例和截图。 文章目录 man基本语法功能选项无选项…

Linux网络——网络层

目录 一.IP协议(IPv4) 二.子网划分 三.特殊的IP地址 四.IP地址的数量限制 五.私有IP地址和公网IP地址 六.路由 七.分片 一.IP协议(IPv4) IP协议:提供一种能力使得数据从一个主机发送到另一个主机的能力。 TCP协…

1、windows10系统下Qt5.12.0与卸载

一、安装包下载 1、Qt社区下载 https://download.qt.io/archive/qt/5.12/5.12.10/qt-opensource-windows-x86-5.12.10.exe 2、百度网盘下载 链接:百度网盘 请输入提取码 3、Qt官网下载: Try Qt | 开发应用程序和嵌入式系统 | Qt 二、安装提示 下…

SQL 中的运算符与别名:使用示例和语法详解

SQL中的IN运算符 IN运算符允许您在WHERE子句中指定多个值,它是多个OR条件的简写。 示例:获取您自己的SQL Server 返回所有来自’Germany’、France’或’UK’的客户: SELECT * FROM Customers WHERE Country IN (Germany, France, UK);语…

基于减法平均算法优化概率神经网络PNN的分类预测 - 附代码

基于减法平均算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于减法平均算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于减法平均优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

大数据技术之数据安全与网络安全——CMS靶场(文章管理系统)实训

大数据技术之数据安全与网络安全——CMS靶场(文章管理系统)实训 在当今数字化时代,大数据技术的迅猛发展带来了前所未有的数据增长,同时也催生了对数据安全和网络安全的更为迫切的需求。本篇博客将聚焦于大数据技术背景下的数据安全与网络安全&#xff…

多项式求和之十二

题目描述 给定程序中函数 fun 的功能是:计算 sf(-n)f(-n1)…f(0)f(1)f(2)…f(n)的值。 f(x)函数定义如下: 输入格式 输入参数。 输出格式 计算公式返回的结果。 输入输出样例 输入1 5 输出1 10.407143 def fun(n):"""s f(-n) …

Facebook的特点优势

Facebook作为全球最大的社交媒体平台之一,同时也是最受欢迎的社交网站之一,Facebook具有许多独特的特点和优势。本文小编将说一些关于Facebook的特点及优势。 1、全球化 Facebook拥有数十亿的全球用户,覆盖了几乎所有国家和地区。这使得人们…

【Spring配置】properties yml配置文件

前言 SpringBoot的配置文件有三种格式 1.properties 2.yaml 3.yml(yaml的简写) (yml和yaml是同一个) 事实上,springboot只支持3个文件. 1. application.properties 2. application.yaml 3. application.yml 如果项目中同时存在properties和yml配置文件,两个同时生效,但是pr…

Linux关于定时任务crontab相关知识了解配合理解shell反弹远程控制

Linux关于定时任务crontab相关知识了解配合理解shell反弹远程控制 几点需要知道的信息 【1】crontab一般来说服务器都是有的,依赖crond服务,这个服务也是必须安装的服务,并且也是开机自启动的服务,也就是说,他基本上是…

接收网络包的过程——从硬件网卡解析到IP层

当一些网络包到来触发了中断,内核处理完这些网络包之后,我们可以先进入主动轮询 poll 网卡的方式,主动去接收到来的网络包。如果一直有,就一直处理,等处理告一段落,就返回干其他的事情。当再有下一批网络包…

LeetCode Hot100 226.翻转二叉树

题目: 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 递归:深度优先遍历 迭代:广度优先遍历 方法:迭代 class Solution {public TreeNode invertTree(TreeNode root) {if (root null…

vue3 tab切换 动态组件

vue3 tab切换 动态组件 先看一张图 具体代码: 组件实例信息 如果你把组件实例放到Reactive Vue会给你一个警告:Component which was made a reactive object. This can lead to unnecessary performance overhead, and should be avoided by markin…

leetCode 1080.根到叶路径上的不足节点 + 递归

给你二叉树的根节点 root 和一个整数 limit ,请你同时删除树中所有 不足节点 ,并返回最终二叉树的根节点。假如通过节点 node 的每种可能的 “根-叶” 路径上值的总和全都小于给定的 limit,则该节点被称之为 不足节点 ,需要被删除…

【教学类-06-07】20231124 (55格版)X-Y之间“加法+题” (以10-20之间为例)(正序+逆序,题目多)

作品展示 上下两套题目不一样 背景需求 在大四班里,预测试55格“5以内、10以内、20以内的加法题、减法题、加减混合题”的“实用性”。 现场发现,只打印一份20以内加法减法混合题。 “这套20以内的加减法最难,谁会做?”&#x…

Linux基本指令及周边(第二弹)

文章目录 前言echo命令重定向more命令less指令(重要)head指令tail指令时间相关的指令Cal指令find指令:(非常重要) -namegrep指令.zip/unzip指令:tar指令(重要):打包/解包…

国标交流充电桩接口和直流充电桩接口介绍

1、背景 与传统油车相比,纯电车有太多的优势,但是纯电需要考虑充电时间的长短以及电池的使用寿命。然而相比较而言,混动有好多的备选方案比如插电式、增程式等,除了满足比电车较远的续航外,充电等待时间大大缩短。 在…

浅谈dll劫持免杀

文章目录 前置知识dll加载dll寻找DLL劫持-白加黑-导入加载DLL劫持-白加黑-导出编译DLL劫持-白加黑-图片分离hookdll原理win api核心代码注意事项 前置知识 基础技能 c语言基本知识win32 API 知识会在微软官网查询APIPE结构知识 原理 DLL劫持的原理主要就是windows下加载DLL…