自動化測試 (四) 自動卸載軟件


在平常的測試工作中,經常要安裝軟件,卸載軟件,  即繁瑣又累。  安裝和卸載完全可以做成自動化。 安裝軟件我們可以通過自動化框架,自動點擊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_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;
        }

 

完整的源代碼下載

 點擊此處下載完整源代碼, 請用vs2010以上打開

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM