zoukankan      html  css  js  c++  java
  • C#_自动化测试 (四) 自动卸载软件

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

    阅读目录

    1. 用msiexec 命令来卸载软件
    2. 注册表中查找ProductCode
    3. C#中自动卸载软件
    4. C#查找注册表中的ProductCode
    5. 完整源代码下载

    用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_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall

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

    64位的程序还在: HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall

    32位的程序而是在: HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionUninstall

     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 = @"SOFTWAREMicrosoftWindowsCurrentVersionUninstall";
                // 如果操作系统是64位并且程序是32位的
                string bit64 = @"SOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionUninstall";
    
                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;
            }
    复制代码

    完整的源代码下载

     点击此处下载完整源代码, 请用vs2010以上打开

  • 相关阅读:
    eclipse安装Genymotion插件
    [Eclipse插件] 安装和使用JD-Eclipse插件
    [Eclipse插件] Eclipse中如何安装和使用GrepCode插件
    [Android Studio] Android Studio如何删除module(转载)
    前端html基本标签
    python实现简单FTP
    文件的md5计算
    suprocess模块
    几个小例子
    configparser模块
  • 原文地址:https://www.cnblogs.com/MarchThree/p/3866842.html
Copyright © 2011-2022 走看看