在虛擬環境中使應用程序與Windows 7兼容(5) |
發布時間: 2012/6/30 11:40:37 |
使用集中管理的單個填充程序數據庫來填充 App-V 應用程序
從策略角度看,要部署集中管理的單個填充程序數據庫并由使用 App-V 進行排序的應用程序選擇該數據庫,您必須做什么?很簡單,按常規方法安裝即可!使用 App-V 安裝的應用程序的啟動方式與應用程序的常規啟動方式大致相同,這種應用程序使用應用了填充程序的加載程序機制。它們只是通過代理進程來啟動。具體地說,sfttray.exe(而不是資源管理器)負責啟動新的進程。因此,進程樹如圖 3 所示。 圖 3 代理進程樹 應用程序啟動時,它像任何其他應用程序一樣運行加載程序。Microsoft Application Virtualization 客戶端接口層 (sftintf.dll) 調用 CreateProcessW,后者調用內部的 API CreateProcessInternalW。填充程序引擎是在 CreateProcessInternalW API 中調用的,填充程序與該進程綁定。 那么,這就相當容易了。還有什么問題嗎?是的,有一個。它不能很好地處理提升。例如,您不能簡單地要求對某個應用程序進行提升(使用 RunAsAdmin 填充程序),也不能對需要使用 ElevateCreateProcess 進行提升的應用程序的問題進行修復。為什么呢?原因是氣泡圖。 例如,我們來看一個嘗試自行啟動一次自動更新的應用程序(遺憾的是,這是一個十分常見的任務)。在以本機方式運行時,它產生了一個問題,即它使用了無法調用提升的 CreateProcess API。它隨后返回錯誤 -1073740756 – STATUS_ELEVATION_REQUIRED。ElevateCreateProcess 填充程序捕獲這個返回值,然后調用應用程序信息服務來提供提升。但該服務無法找到要提升的應用程序,因為該服務位于氣泡圖之外! 因此,只要應用程序不需要提升,在已創建一個進程的情況下,部署單個填充程序數據庫解決方案就十分容易,您只需繼續做相同的事情。 本文出自:億恩科技【www.vbseamall.com】 |