2021年3月1日 星期一

使用 VMware ThinApp 製作獨立環境綠色免裝軟體跨越作業系統版本限制

前幾天電腦強迫自動更新成「版本 2004 (OS 組建 19041.804) 」,結果我多年前為了升級 Win 7 以 ThinApp 打包的陳年 XP 版軟體,突然不能正常開啟了,開相容模式以管理權限也無用,去查了事件檢視器,發現是錯誤「事件 1000,Application Error」、「例外狀況代碼: 0xc0000005」。網路一查主要原因是「Access Violation」,這範圍廣得不行。

嘗試了網路解法,關閉「資料執行防止」:
按 [Windows] + [R] 執行「sysdm.cpl」以開啟系統內容設定畫面,到「進階」頁面點選效能區的設定按鈕,在跳出的「效能選項」視窗中開啟「資料執行防止」頁面,點選第二個選項「為所有...開啟DEP,除了我選擇的這些」,然後在下面選擇例外的執行檔。設定好需要重開機,然後我的軟體還是不能正常執行,事件檢視器內容都一樣,除了多了個資訊「事件 1001,Windows Error Reporting」、「事件名稱: APPCRASH」,並沒有其他效果。另外找了幾個解法都不合用,最後乾脆找新版 ThinApp 再打包一次軟體試試。

在不同版本甚至不同作業系統下,大家常用虛擬機器來模擬指定版本作業系統環境,比如近來很香的 M1 版 Apple Macbook ,不使用 Intel X86 架構、改ARM以後不能雙系統了,就只能裝 Parallels Desktop 跑 Win10 虛擬機器執行視窗版軟體。
但是模擬整個作業系統要佔用許多資源,這時候有個軟體可以把必要的執行檔、登錄碼、數據庫等東西打包,同時保有封閉的指定作業環境,極大地精簡了體積及所需資源、也提高了執行效率。比如說網頁設計師需測試各版本IE相容性,只要開啟單獨WINXP版IE6或WIN7版IE10的執行檔。或是偶爾需要在別人電腦執行個 PS、Illustrator ,又或陳年老軟體只能在WinXP正確執行,這時這個不需要安裝、不需要切換作業系統的解決方案真是太方便了。

VMware ThinApp 是個付費軟體,可以到官網加入會員後、下載軟體並取得60天試用碼(我這次使用免洗電郵「https://getnada.com/」)。目前 ThinApp 最新版是5.2.9,但不支援我需要的Windows XP,所以我也下載有支援的最後版本5.2.3。我常用的虛擬機器軟體是免費的Oracle VM VirtualBox,開啟乾淨的WinXP並安裝 ThinApp 5.2.3 後,就準備來打包。

它的逐項運作過程是:
  1. Prescan:先掃描系統檔案及登錄碼,掃描完畢以後,按Next到下一步驟;
  2. Install Application:不要急著按下「Postscan」,先安裝好要打包的軟體再回來按;
  3. Postscan:軟體會再掃描一次找出不同之處,準備複製進專案資料夾;
  4. Configure:依照執行需求調整參數;
    • Entry Points:有時軟體有多項功能或附屬工具程式,ThinApp在此步驟會列出可執行項目、並預先勾選推薦的程式「進入點」。有時候會誤判或者勾選不必要的功能,需要自已檢查清楚決定好,選錯的話之後得手動改參數重新打包。
    • Manage With VMware Workspace:選擇「是/否」整合「VMware Horizon Application Manager」,類似軟體商店管理。通常不加入。
    • Groups:使用者群組權限設定,一般個人或中小企業用不太到,需要的話須小心,錯了沒得改得重新打包。 
    • Isolation:隔離模式分為「Merged」和「WriteCopy」;
      • 「Merged Isolation Mode」擁有打包檔外部(也就是執行環境)讀寫權限,相對不封閉,適合Microsoft、Adobe這種微軟認證軟體,個人的經驗以未認證軟體選這個模式,可能會被認定是蠕蟲或木馬病毒。
      • 「WriteCopy Isolation Mode」能讀取打包檔外部(執行環境)資料,但不能直接寫入,會放置在Sandbox(沙盒)中。適合舊版或大部分的其他軟體。
    • Sandbox:安全且獨立的沙盒用來放置改變過的登錄參數及設定檔,可選User Profile 使用者軟體資料夾、Same directory 打包軟體位置(適合隨身碟)、或任意指定資料夾。可以手動改參數指定軟體開啟或關閉時清除。
    • Quality Assurance Statistics:選擇「是/否」傳資料給VMware以協助他們改善品質。我選否避免造成防火牆示警。
    • Project Settings 頁1:輸入「Inventory Name」封裝資料夾的名稱、選擇或輸入「Project Location」存放位置。
    • Project Settings 頁2:
      • Primary Data Container:選擇封裝在執行檔本身或另外放在單獨的「.dat」資料檔(適合多功能/程式)。
      • MSI Package Generation:選擇是否同時封裝微軟「.msi」安裝檔。
      • Compression:對封裝進行壓縮,相對的打包時間會較長。
    • Save Project:點Next後ThinApp匯出相關資料到專案資料夾,結束再按Next下一步。
    • Ready to Build:可以選擇修改「Package.ini」內的詳細設定值、或直接按Build打包。
  5. Build Project:打包成跨版本綠色免裝軟體,只要把專案資料夾內的「bin」資料夾複製出來即可單獨使用,此資料夾名稱可手動改 Package.ini 自訂。
上述最後的打包動作,為求謹慎,我把 Windows 10 更新到20H2最新版,利用Windows Sandbox 內建沙盒,在裡面安裝ThinApp最新版,然後把專案資料夾複製進去,在裡面執行「build.bat」打包。分開以新版封裝的作法是參考某忘了出處官方文件,Sandboxie 作為第三方沙盒軟體雖速度快,但覺得比較不適合用來做封裝。

以下幾個 Package.ini 設定值供參考,詳細可查官方手冊
  • [Isolation]
    • RegistryIsolationMode=WriteCopy、RegistryIsolationMode=Merged (隔離模式選擇)
  • [BuildOptions]
    • MSIIs64Bit=1 (64bit安裝檔)
    • Wow64=1 (64bit環境跑32bit必選)
    • AltArchitectureShortcut=1 (64bit環境跑32/64bit混用)
    • SandboxPath=.、SandboxPath=LocalSandbox\Subdir1、SandboxPath=%AppData%\Thinstall (選擇或修改Sandbox存放位置)
    • SandboxRemovableDisk=1 (USB隨身碟)
    • RemoveSandboxOnExit=1 (關閉軟體時清空沙盒)
    • PermittedGroups=Administrator;OfficeUsers (使用者群組權限)
    • OptimizeFor=Memory、OptimizeFor=Disk (效率還是體積優先)
    • OutDir=bin (封裝檔輸出位置)
  • [Compression]
    • CompressionType=Fast、CompressionType=None (壓縮與否)
  • [app.exe]
    • Disabled=1 (封裝時不建立該執行檔)

反覆修改封裝了幾個版本,最後留了完整版和精簡版個別zip起來,任務完成。

2 則留言:

  1. 还是不行啊,搞不定啊,封装IE,现在WIN10打开还是报这个错啊

    回覆刪除
  2. IE深度整合作業系統,特別難搞,我個人會選擇使用虛擬機器。

    回覆刪除