自动化测试之自动卸载软件
2023-09-11 14:20:33 时间
在平常的测试工作中,经常要安装软件,卸载软件, 即繁琐又累。 安装和卸载完全可以做成自动化。 安装软件我们可以通过自动化框架,自动点击Next,来自动安装。 卸载软件我们可以通过msiexec命令行工具自动化卸载软件
阅读目录
用msiexec 命令来卸载软件
注册表中查找ProductCode
C#中自动卸载软件
C#查找注册表中的ProductCode
完整源代码下载
用msiexec 命令来卸载软件
平常我们手动卸载软件都是到控制面板中的”添加/删除”程序中去卸载软件, 或者通过程序自带的卸载软件来卸载。
我们可以通过 MsiExec.exe /X{ProductCode} 命令来卸载程序。
关于MsiExec.exe 请看 http://technet.microsoft.com/zh-cn/library/cc759262%28v=WS.10%29.aspx
注册表中查找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#的卸载代码比较简单, 当然你也可以用其他语言。
p.StartInfo.FileName = "msiexec.exe"; p.StartInfo.Arguments = "/x {C56BBAC8-0DD2-4CE4-86E0-F2BDEABDD0CF} /quiet /norestart"; p.Start();
最麻烦的在于,如何到注册表中获取ProductCode。 如果做非Web程序的自动化测试,经常需要跟注册表打交道。 代码为:
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); 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; 最新内容请见作者的GitHub页:http://qaseven.github.io/
选择1对1视频软件源码,关键不仅是系统实现 对于1对1视频软件源码来说,性能是非常重要的一项指标,在系统后期运营中必定会出现用户高并发的情况,如果系统性能不好,很可能会因为高并发引发一些问题,影响用户体验。用户体验是影响用户留存的关键,如果出现性能问题,必定影响用户留存。
C#中卸载程序 C#的卸载代码比较简单, 当然你也可以用其他语言。
p.StartInfo.FileName = "msiexec.exe"; p.StartInfo.Arguments = "/x {C56BBAC8-0DD2-4CE4-86E0-F2BDEABDD0CF} /quiet /norestart"; p.Start();
最麻烦的在于,如何到注册表中获取ProductCode。 如果做非Web程序的自动化测试,经常需要跟注册表打交道。 代码为:
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); 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; 最新内容请见作者的GitHub页:http://qaseven.github.io/
选择1对1视频软件源码,关键不仅是系统实现 对于1对1视频软件源码来说,性能是非常重要的一项指标,在系统后期运营中必定会出现用户高并发的情况,如果系统性能不好,很可能会因为高并发引发一些问题,影响用户体验。用户体验是影响用户留存的关键,如果出现性能问题,必定影响用户留存。
相关文章
- 测试开发——听说,SDET 是一个畸形的职位?
- web自动化测试的智能革命:AI如何推动软件质量保证的未来
- 软件自动化测试初学者忠告
- 测试开发 | 电商业务性能测试: Jmeter 参数化功能实现注册登录的数据驱动
- 软件回归测试的真实含义
- 软件测试之测试策略
- 测试开发工程师程序员为什么会忧虑自己的未来?最黄金年龄规划 IDP
- 与微软高级软件工程师的对话:如何进行自动化测试?
- Kapacitor行为测试
- 《软件测试技术实战:设计、工具及管理》—第2章 2.6节软件白盒测试
- 《软件功能测试自动化实战教程》—第6章6.2节数据驱动测试的一般步骤
- 《软件功能测试自动化实战教程》—第6章6.6节使用数据驱动器来参数化测试
- 《软件功能测试自动化实战教程》—第6章6.7节文件数据源的数据驱测试
- 《精通软件性能测试与LoadRunner最佳实战》—第1章1.1节软件测试基础
- 《精通软件性能测试与LoadRunner最佳实战》—第2章2.8节场景运行监控
- 《Web测试囧事》——2.7 多入口功能的特殊处理造成的Bug
- 基于网络服务器端的网口测试-软件
- 自动化测试最佳实践 连载二
- 【AGC】使用沙盒测试付费下载返回错误码7
- 软件渐进性测试策略
- 软件接口测试 (1)
- 认识软件性能测试10大误区
- 浅谈软件静态测试中的代码审查
- Appium IOS 自动化测试初探
- 软件质量特性测试