1. 程式人生 > 實用技巧 >自動化測試 (四) 自動解除安裝軟體

自動化測試 (四) 自動解除安裝軟體

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

來源:小坦克https://www.cnblogs.com/TankXiao/default.html?page=1

完整的原始碼下載

點選此處下載完整原始碼, 請用vs2010以上開啟

附: 自動化測試 系列教程, (連載中, 敬請期待)

自動化測試 (一) 12306火車票網站自動登入工具

自動化測試 (二) 連連看外掛

自動化測試 (三) Web自動化測試原理

自動化測試 (四) 自動解除安裝軟體

自動化測試 (五) 讀寫64位作業系統的登錄檔