qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          自動化測試之自動卸載軟件

            在平常的測試工作中,經常要安裝軟件,卸載軟件,  即繁瑣又累。  安裝和卸載完全可以做成自動化。 安裝軟件我們可以通過自動化框架,自動點擊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#的卸載代碼比較簡單, 當然你也可以用其他語言。
          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;
          }

          posted on 2014-02-17 14:32 順其自然EVO 閱讀(459) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2014年2月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          2324252627281
          2345678

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 滨海县| 定日县| 黔西| 普兰店市| 昌黎县| 罗甸县| 旌德县| 红原县| 黄龙县| 铜鼓县| 仙游县| 山东省| 揭阳市| 宜良县| 新兴县| 双牌县| 孟津县| 龙口市| 天镇县| 锦屏县| 丹巴县| 吉林市| 德惠市| 福贡县| 泸溪县| 凤山市| 阳朔县| 乌兰县| 仙居县| 韩城市| 苏尼特右旗| 张掖市| 沈阳市| 保康县| 横山县| 西安市| 伊通| 宁武县| 涿鹿县| 河津市| 怀安县|