Windows 管理

使用終端服務部署應用程式

Greg Shields

 

概覽:

  • RemoteApps 的優勢
  • 使應用程式能夠為使用者所用
  • 評估終端服務實現
  • 確保積極的使用者體驗

目錄

告別桌面,迎來 RemoteApps
從 Web 啟動應用程式
從桌面啟動應用程式
使用者體驗
RemoteApps = 可預測的性能
由您自行選擇

您可以在 Internet 上以及當地書店裡找到許多有關如何安裝和使用終端服務的說明。但是它們中的大部分都對遠端應用程式能夠為使用者帶來哪些益處語焉不詳。只需很少的操作,您就可以在您的環境中快速部署一台託管所需應用程式的終端伺服器。但是要滿足使用者的期望,還必須要考慮一些其他情況。

如果您是終端伺服器管理員,則需要撇開遠端應用程式基礎結構來考慮以下幾點:打算如何部署應用程式?是否要為使用者提供遠端桌面或 TS RemoteApps?使用者如何訪問其應用程式,是通過靜態遠端桌面協定 (RDP) 檔、Web 頁面還是桌面快捷方式?

最後,如何評估使用者使用終端服務應用程式時的體驗?由於在 Windows Server 2008 中對終端服務做了改進,所以現在有關這些重要問題的最佳答案可能會令您大吃一驚。

告別桌面,迎來 RemoteApps

Windows Server 2008 借助一組重要的服務和功能擴展,解決了終端服務管理中存在的諸多難題。在 2008 年 11 月的《TechNet 雜誌》中,曾就其新增功能和改進功能進行過討論,當時 Joshua Schnoll 詳細介紹了改用 Windows Server 2008 所能獲得的各種新功能(“通過增強的終端服務進行演示虛擬化”)。在這些功能中,最重要的可能是終端伺服器不必再為使用者部署完整桌面,現在可以部署單個應用程式。

這些單個應用程式被稱為 TS RemoteApps,對於使用者而言,這些應用程式就如同直接安裝到使用者本地桌面一樣。當使用者按一下啟動某個 RemoteApp 時,他在本地電腦上只能看到該應用程式本身。沒有多餘的“開始”功能表列,也沒有雙重桌面,從而使您能夠輕鬆與非本地系統進行交互。從實施和使用者的期望判斷,TS RemoteApp 可能要比部署一個完整桌面更具優勢,原因很簡單,就是它可以使這些應用程式看起來像是正常的本地桌面體驗的一部分。

在 Windows Server 2008 中,使用“Administrative Tools”(管理工具)中的“TS RemoteApp Manager”(TS RemoteApp 管理器)主控台創建新 TS RemoteApp 的過程非常簡單。按一下“Actions”(操作)窗格中的“Add RemoteApp Programs”(添加 RemoteApp 程式)連結啟動“RemoteApp Wizard”(RemoteApp 嚮導),此嚮導可查詢終端伺服器的 Windows Management Instrumentation (WMI) 存儲區,以確定該伺服器上已安裝的潛在應用程式的清單。此清單的一個示例如圖 1 所示。

圖 1**“RemoteApp 嚮導”枚舉終端伺服器上已安裝的應用程式**

從清單中選擇希望創建為 RemoteApps 的應用程式,然後按一下“Next”(下一步)。如果其中未包含所需的應用程式,可按一下“Browse”(流覽)按鈕定位其主 EXE 檔。這裡所說的主 EXE 檔通常是指用來啟動該應用程式的檔。完成嚮導後,即可開始部署您的遠端應用程式。

如果按右鍵查看新 RemoteApp 的屬性,您就會發現有幾個選項可以進行調整。除能夠修改名稱、位置、圖示和別名資訊以外,您還可以輸入命令列參數。這對於那些啟動時需要一組參數才能正常運行的應用程式來說非常方便,此外它還可以與某些應用程式結合使用來創建到遠端內容的連結。

許多管理員可能沒有立刻意識到,轉移到 TS RemoteApps 並不僅僅意味著可以使應用程式呈現在使用者的螢幕上。通過某些小技巧,您還可以使用 RemoteApps 自動啟動預配置的內容。

例如,假設您希望為使用者部署的不是應用程式,而是特定的文檔。您可能不希望創建將使用者連結到空白應用程式(例如 Microsoft Office Word 或 Access)的 RemoteApp,例如,您想將其連結到特定的 Word 文檔或 Access 資料庫。在這種情況下,您可以通過在應用程式的主 EXE 後面輸入該文檔的名稱作為參數來達到此目的。因此,如果希望創建一個到基於 Access 2007 的 PTO(帶薪休假)資料庫的連接(該資料庫存儲在 \\fileServer\fileShare\CompanyPTO.accdb 下),只需創建一個名為 "PTO Database" 的新 RemoteApp 並輸入該文檔的位置作為命令列參數即可。現在,當使用者按兩下啟動 PTO Database 應用程式時,會自動連接到 Access 並已預載入了正確的資料庫。

如您所見,創建到遠端內容的連接是擴展 RemoteApps 實用性的另一種方式。但對於所有 RemoteApps 而言,您的使用者仍然必須通過連接到圖示的連結才能開始操作。在後續部分中,我將討論在 Windows Server 2008 中使用終端服務完成這些工作的幾種方法。

從 Web 啟動應用程式

新的 TS Web Access 角色服務允許在預配置的網頁中託管應用程式快捷方式。此角色服務將與環境中的終端伺服器相集成,為使用者提供一個可以查找並啟動其應用程式的位置。圖 2 顯示了此網頁呈現給使用者的外觀。

fig02.gif

圖 2 TS Web Access 網頁枚舉已部署的 RemoteApps

要創建此類網頁,可在現有 IIS 伺服器上安裝 TS Web Access 角色,然後將 TS Web Access 伺服器的電腦帳戶添加到域中的“TS Web Access Computers Global Group”(TS Web Access 電腦通用群組)。請注意,對於一些小型環境,可以將 TS Web Access 安裝到現有終端伺服器上以實現單伺服器解決方案。

完成 RemoteApp 安裝後,可以在“TS RemoteApp Manager”(TS RemoteApp 管理器)中按右鍵已配置的 RemoteApp,然後在 TS Web Access 中選擇“Show”(顯示)將其啟用。使用遠端桌面用戶端 6.1 或更高版本的使用者可以隨後導航至 https://serverName/ts,以查看應用程式快捷方式的清單。按一下任何出現的快捷方式都將自動啟動 RemoteApp。

TS Web Access 是一種非常簡單的方法,它可以為查找和啟動應用程式提供友好的介面。如果應用程式或版本定期更改,這將會非常有用;更新網站僅涉及在 TS Web Access 中隱藏到舊有應用程式或版本的連結,然後在安裝新應用程式或版本後顯示其新連結。

但是,此工具也存在一些限制。首先,沒有內置的機制來限制使用者可以訪問的應用程式。每個通過身份驗證的使用者都可以看到所有在終端伺服器上創建的且在 TS Web Access 中設為可見的 RemoteApp。

第二個問題與使用者通常採用的對應用程式的處理方式有關。在啟動某個應用程式(例如 Word)時,您是否會經常通過按一下該應用程式的快捷方式來啟動?我敢打賭次數肯定不會太多。比較可能的方式是按兩下一個現有的 Word 文檔來啟動應用程式並預載入該文檔。

遺憾的是,TS Web Access 並不支援這種啟動應用程式的方式。對於那些習慣于按兩下文檔來啟動關聯應用程式的使用者而言,TS Web Access 可能不算是一種令人滿意的解決方案。不過請不要擔心,我們接下來將針對這種情況討論另外一種更加有用的選項。

從桌面啟動應用程式

對於那些希望通過按兩下文檔來啟動應用程式的使用者,現在終端服務提供了將遠端應用程式的連結“安裝”到桌面的功能。此過程可將 RemoteApp 的 RDP 檔有效地封裝到 Windows Installer 套裝程式(一個 MSI 檔)中,隨後可將其安裝到環境中的桌面上。

同時,安裝的 MSI 可以修改桌面上的檔副檔名關聯,以將按兩下的檔重新路由到終端伺服器上與其關聯的 RemoteApp。圖 3 顯示了在用戶端系統上安裝 Word RemoteApp 後,對檔副檔名關聯所做的修改。此時,按兩下任何常見的 Word 檔副檔名都將會通過“遠端桌面連接”啟動 Word。

fig03.gif

圖 3 修改為啟動“遠端桌面連接”的檔副檔名關聯

要從現有的 RemoteApp 創建 Windows Installer 套裝程式,首先導航至“TS RemoteApp Manager”(TS RemoteApp 管理器)。按右鍵所關注的 RemoteApp 並選擇“Create Windows Installer Package”(創建 Windows Installer 套裝程式)。預設情況下,所有已創建的 Windows Installer 套裝程式都存儲在 C:\Program Files\Packaged Programs 下,但可以利用 RemoteApp 嚮導來更改此位置。在嚮導中還可以配置將要託管 RemoteApp 的伺服器的名稱和埠以及伺服器身份驗證、證書設置和 TS 閘道設置等。

安裝到候選桌面後與應用程式位置相關的設置如圖 4 所示。如您所見,快捷方式不但可以在桌面上創建,還可以在“開始”功能表資料夾中的某個位置創建。此螢幕中最重要的核取方塊是螢幕最下方的核取方塊。此核取方塊用於“取代”用戶端設置,它會將與 RemoteApp 的所有檔副檔名關聯從本地桌面重新關聯到終端伺服器。如果希望使使用者能夠通過按兩下文檔來啟動其 TS 託管的應用程式,必須選中此核取方塊。按一下“Next”(下一步)和“Finish”(完成),結束此嚮導。

圖 4 創建 Windows Installer 套裝程式可啟用用戶端檔副檔名的關聯

很明顯,使用桌面安裝將使用者連接到應用程式的優勢在於它不需要改變使用者的行為。應用程式安裝完畢後,使用者可以像以前一樣通過按兩下文檔來啟動應用程式。

但是這種方法本身也存在著弊端,那就是需要執行額外的桌面管理工作。以這種方式使用的每個 RemoteApp 在每個需要訪問的桌面上都必須執行安裝。雖然此過程可通過“群組原則軟體安裝”(稍後會進行討論)加以簡化,但它仍然增加了管理負擔。而且,當應用程式更改時,很可能每個桌面上安裝的 RemoteApps 也需要更新。

創建了 Windows Installer 套裝程式後,通過“群組原則軟體安裝”來安裝此套裝程式的過程並不複雜。首先,創建一個可供群組原則訪問的檔共用。在單一終端伺服器方案中用於此檔共用的理想位置可能當屬終端伺服器上預設的 C:\Program Files\Packaged Programs 資料夾。確保已為該資料夾和共用分配了適當的許可權,以便用戶端能夠在“群組原則”處理過程中訪問該共用。然後,創建新的群組原則物件 (GPO) 並導航至“Computer Configuration”(電腦配置) | “Policies”(策略) | “Software Settings”(軟體設置) | “Software installation”(軟體安裝)。按右鍵“Software installation”(軟體安裝),選擇“New”(新建) | “Package”(套裝程式)。在出現的對話方塊中,定位針對 RemoteApp 創建的 MSI 檔。在詢問部署方法時,選擇“Advanced”(高級)。

此時您可以進行選擇。RemoteApps 的安裝程式非常小,只會在 C:\Program Files\RemotePackages 資料夾中安裝 RDP 檔和圖示,因此您可能希望選擇此選項以便在超出管理範圍時“卸載”此應用程式。選擇此選項後,每次刪除 GPO 時或電腦被移動到 GPO 不再適用的新 OU 時,RemoteApp 都會自動從電腦中移除。啟用此選項可以在電腦和應用程式移入或移出管理範圍時簡化 RemoteApp 的移除過程。

使用者體驗

通過這些機制中的任意一種來部署應用程式都非常出色,但終端服務管理畢竟不僅僅局限于創建和部署應用程式。確保您的實現能夠滿足使用者需求也同樣重要。在任何有關應用程式交付的討論中,考慮主觀性能指標以捕捉使用者體驗的品質都至關重要。儘管很難使用硬性指標進行量化,但有效的終端服務部署必須考慮將使用者的總體滿意度作為定義成功的量度。

例如,在某些情況下使用者可能會覺得很麻煩,特別是當多人共用同一伺服器上的資源時。使用終端服務時,多個使用者需要擠在單一伺服器上共用該伺服器中安裝的應用程式。將大量使用者彙集到少數幾台伺服器上可以減少應用程式的數量,從而簡化應用程式的管理。需要管理的應用程式越少,意味著所需的修補程式越少、環境更容易控制,而且管理難點也會更少。

這種對使用者的整合需要終端伺服器管理員擔當起系統維護者的角色。經驗豐富的管理員可以通過觀察使用者在系統中的行為並主動制定應對措施來管理終端伺服器場。通過進行重新配置和鎖定防範等更改,可確保單個使用者的不當行為不會影響其他使用者的體驗。

例如,有經驗的終端伺服器管理員會配置性能警報,以便在處理器利用率向上攀升並維持在非常高的水準時得到通知。這種行為通常表明某個進程獨佔了處理器,或者某個使用者啟動的操作佔用了共用系統中過多的資源。跟蹤並結束這種惡意進程只是解決此類事件的第一步。找出此類進程出現的原因才是根治這種問題的長期解決方案。

在這種情況下,應該要確保遠端應用程式至少能夠像在本地桌面上執行一樣。側欄“重要的終端服務效能計數器”顯示了一些可説明您瞭解性能情況的 PerfMon 指標。

RemoteApps = 可預測的性能

RemoteApp 是有效的終端服務會話,其中會話的寬度和高度均與待啟動應用程式的完全相同。其結果是遠端應用程式看起來像本地應用程式一樣,因為會話的邊界永遠不會擴展到應用程式自身的邊界以外。

Microsoft 實現的 RemoteApps 實際上要比前面所述智慧得多。從啟動和運行時所需資源的角度來看,部署的 RemoteApp 與部署的完整桌面並不相同。啟動遠端桌面需要使用 explorer.exe 的實例來操作桌面外殼程式以及所有配置為與 explorer.exe 一同啟動的進程,例如系統託盤應用程式、輔助應用程式或者隨標準桌面啟動的任何服務或進程。

相比而言,RemoteApp 的啟動不需要完整的 explorer.exe 外殼或所有載入項。事實上,RemoteApp 使用另外兩個進程(rdpshell.exe 和 rdpinit.exe)取代了 explorer.exe。這兩個簡化的進程將作為替代外殼和外殼登錄應用程式運行,用於啟動 RemoteApp。

圖 5 顯示了終端伺服器的簡化示例,其中有兩位使用者連接並啟動了計算器應用程式。User1 通過完整桌面登錄,而 User2 連接到預先創建的 RemoteApp 實例 calc.exe。儘管您會發現 User2 啟動 calc RemoteApp 所需運行的進程數相比要多一些,但這些進程所使用的記憶體總量卻要比 User1 的資源管理器外殼所使用的記憶體少,如圖 6 所示。

fig05.gif

圖 5 工作管理員顯示桌面和 RemoteApps 所用資源的差別

圖 6 記憶體使用情況示例
運行的進程 User1–完整桌面 User2–RemoteApp
Explorer.exe 7064KB 不適用
Tasking.exe 1792KB 1704KB
Dwm.exe 588KB 516KB
Rdpclip.exe 1032KB 908KB
Calc.exe 648KB 716KB
Rdpinit.exe 不適用 860KB
Rdpshell.exe 不適用 828KB
總計 11124K 5532KB

這種減少的 RAM 消耗只是性能討論的一部分。此外還必須考慮使用者行為對處理器使用的影響。在為某個使用者部署了完整桌面後,他將會獲得運行終端伺服器上所有已安裝應用程式的能力。

如果沒有適當的鎖定防範,利用終端服務在 Word 中編寫文檔的羽量級使用者可以隨時通過啟動另一個功能更為強大且需要更多資源的應用程式而變為重量級使用者。這種行為的不可預見性使得為每位使用者規劃資源的工作變得極具挑戰性。它還會使終端伺服器的管理變得更加複雜,從而增大了因單個使用者的行為而影響其他使用者體驗的可能性。

Internet Explorer 可能就是這種不可預見性的最好示例。在 Windows Server 的每個實例上都安裝有此應用程式,而且運行它通常不需要太多資源。但是,當使用 Internet Explorer 來呈現一個需要很多外掛程式且編寫得非常糟糕的網站時,其資源使用會大幅增加。如果某個使用者在桌面會話中不小心運行了 Internet Explorer,可能會意外耗盡終端伺服器上的可用資源,從而導致其他使用者程式性能降低。

與完整桌面相比,RemoteApps 的結構在資源使用方面更具可預測性。啟動 RemoteApp 的使用者只能使用特定的應用程式以及初始應用程式關聯的其他應用程式。因此,從性能方面對使用者的行為更容易預測。

由您自行選擇

本文的最終目標是使您能夠瞭解為使用者部署遠端應用程式時可以選擇的選項。在 Windows Server 2008 中,其終端服務所具有的新功能可以為使用者連接到應用程式提供多種途徑。桌面託管的與 Web 託管的某種組合加上完整桌面與 RemoteApp 的對比將能夠為您的特殊環境提供正確的配置。

重要的終端服務效能計數器

儘管衡量使用者體驗通常是一種主觀性的活動,它涉及的主要是個人感覺而非客觀指標,但也有一些非常有用的效能計數器,其測量指標可以説明您確定終端伺服器的性能,而這些性能將會影響到使用者的滿意度。您應考慮在終端伺服器上測量以下計數器:

Memory\Available MBytes 如果此計數器減小到很小的值,則表示終端伺服器上的進程正在消耗大部分可用實體記憶體。雖然較低的數值不一定不好,但當其與較高的執行緒數和較高的 pages/sec 一同出現時,較低的數值可能表示有過多的使用者正試圖在一台伺服器上執行過多的任務。

Memory\Pages/Sec 此計數器與磁片從記憶體讀取資料或從記憶體向磁片寫入資料的速率相關。如果此處的計數值較高且與較低的 Available MBytes 計數值同時出現,則可能表示可用記憶體不足,無法承擔伺服器上載入的任務,並因而導致使用者體驗不佳。

Processor\% Processor Time 此計數器可明確地顯示出生產性工作正在使用的處理器數量。您應當密切關注此指標,尤其是在多處理器系統中,因為它可以指出處於掛起或峰值狀態的處理器。

System\Threads 伺服器運行的每個進程都由多個執行緒組成。Threads 計數器是一個整數,表示系統上所有進程的總和。終端伺服器通常具有較高的執行緒和進程計數,因為會有許多使用者同時使用系統資源。當此計數值很高時,有理由假定有大量活動正試圖同時在伺服器上執行。較高的執行緒計數通常會導致較高的 Context Switches 計數,因為伺服器會嘗試處理每個進程的需求。

System\Context Switches/Sec “Context Switch”(上下文切換)發生在處理器每次更改其當前處理的執行緒時。每次上下文切換都會產生輕微的負荷,所以此處較高的計數(伴隨較高的執行緒計數)可能表示許多使用者正試圖同時執行大量任務。

System\Processor Queue Length 當處理器無法承擔所有負荷時,請求將開始排隊。用於該佇列的計數器稱為 Processor Queue Length。當此計數器的值很高時,可以假定伺服器的處理器無法處理所有請求,這可能同時也表明會對使用者體驗的影響。

Terminal Services\Active Sessions 和 Terminal Services\Total Sessions 這兩項指標有助於高效評估相對於終端伺服器上正在工作的使用者數量而言資源的使用情況。第一個計數器衡量正在處理會話的使用者,而第二個計數器則包括處於空閒狀態或已經斷開連接的使用者。這兩個計數器與其他計數器相結合將有助於確定您的伺服器在超負荷運行並導致使用者體驗受到影響之前,能夠處理的最大使用者數量。

您看到的實際數量將取決於您的硬體組成、所安裝的應用程式以及系統中使用者的數量和類型。因此,如果提供精確的數值作為閾值可能會讓人產生誤解。相反,當您的指標與正常操作時的指標相差很大時,您應查看您自己的數量或時間的變化,並將其作為確定使用者體驗何時變差的第一手資料。

Greg Shields 是一名 MVP,他同時還是 Concentrated Technology 公司的共同創始人和 IT 專家。他的新書《Windows Server 2008: What's New/What's Changed》(Windows Server 2008:新增功能和改進功能)由 SAPIEN 出版社出版。您可以通過www.ConcentratedTech.com與 Greg 取得聯繫。