簡介
有多種為 Microsoft Windows XP Embedded 創建自定義組件的方法。例如,可以將導入設備驅動程序 .inf 文件直接導入到 Component Designer 工具中(與 Microsoft Windows NT Embedded 4.0 相比,這是一項巨大的進步)。可以通過導入 Devices.pmq(Target Analyzer Probe (TAP) 或 Target Analyzer (TA) 的輸出)來創建組件 — 到目前為止一切順利 — 但是如何創建能夠描述自定義應用程序的組件呢? 出於本文的目的,我決定構建一種安全設備,它使用 TimerShot Windows XP PowerToy — 一種非常酷的應用程序,可以從連接的映像設備捕獲映像,並且將該映像存儲到預設的位置 — 我的本地硬盤上,或者網絡共享上(在本文末尾可以找到指向 Windows XP PowerToy 的鏈接)。可以將 TimerShot 配置為每數秒鐘或每數分鐘抓取一個映像;所有這些都在應用程序內部配置,並且存儲在 Windows XP 注冊表中。我還將包含另一個名為“PhotoDisplay”的應用程序,它是我專門為本文編寫的。PhotoDisplay 可用來查看已存儲的 JPEG 文件。
遺憾的是,沒有任何工具可以自動完成為應用程序生成 Windows XP Embedded 組件的過程 — 需要進行一些偵探工作。因此,我將擺脫獵鹿人,叫上我的朋友華生醫生(這裡是雙關語),並且開始工作。
安裝選項 在構建 Windows XP Embedded 設備時,可以使用多種用於添加第三方應用程序/技術的選項。這些選項主要取決於設備的硬件配置以及用於制造發行設備的方法。
在構建從 R/W 媒體(通常是硬盤)中啟動並且包含 CD-ROM/DVD-ROM 驅動器、顯示器、鍵盤和鼠標的設備時,將具有最大的靈活性。在該配置中,可以直接在 Embedded Target 上運行第三方安裝程序,這將直接在目標設備上復制和配置應用程序。如果要構建一次性的設備,或者如果要在 Windows XP Embedded 上測試應用程序以確保所有必需的操作系統組件都存在(將在下面討論),則該選項很有用。
另一個選項是生成 Windows XP Embedded 映像(通常是生成到 \Windows Embedded Images 文件夾中),再將必需的應用程序/資源手動添加到生成文件夾中。然後,可以將 Windows XP Embedded 操作系統映像(以及應用程序/資源)復制到可啟動的媒體,並且隨後可以對應用程序進行測試。這僅適用於不要求注冊 COM 對象或安裝基礎操作系統服務的簡單應用程序。
最好的方法是創建一個滿足以下條件的組件:可以在 Target Designer 內部使用該組件,並且可以像任何其他 Windows XP Embedded 組件一樣選擇該組件。如果您已經在多用戶情況中安裝了 Windows XP Embedded 工具,則這是一種理想的選項。但是,這需要完成一些工作。讓我們分析一下如何安裝應用程序,以及通常修改操作系統的哪些部分。
安裝程序的形式和大小各不相同,既可以是簡單的 xcopy、IExpress,也可以是要求用戶提供注冊信息並且可能發行多張 CD/DVD 的 GUI 安裝程序。安裝程序可能安裝數據庫引擎或操作系統服務、設備驅動程序或支持 DLL,並且可能對操作系統注冊表或 INI 文件進行更改 — 在某些情況下,所安裝的文件可能被安裝到 PC 上的多個文件夾中:用於存放核心應用程序的 Program Files,用於存放設備驅動程序的“\Windows\System32”,或者其他取決於安裝程序的文件夾。要確定應該在您的 Windows XP Embedded 組件中包含哪些內容,乍看起來似乎並不是一件普通的工作。令人欣慰的是,有一些工具和技術可以為您提供協助。
下一部分將對在確定要在 Windows XP Embedded 組件中包含哪些文件/注冊表設置和操作系統組件時需要的工具進行高級概述。
偵探工具包 本部分概述了在生成自定義 Windows XP Embedded 組件時需要的工具。
在生成和測試組件時,需要兩組工具。其中一些工具將運行在開發 PC 上,而其他工具將包含在目標設備上以調試應用程序或組件。讓我們將這些工具劃分為上述兩個類別,然後考察一下每種工具的使用方法。
在開發 PC 上使用的工具 雖然無法更改應用程序的安裝程序的行為,但是可以監控操作系統以判斷安裝應用程序後產生了哪些更改。可以使用許多工具來協助完成這一過程。因為某些安裝程序在安裝過程中 要求重新啟動,所以理想情況下應該使用能夠在重新啟動以後監控 PC 的文件系統和注冊表中的更改的工具。諸如 Inctrl5 (ZDNet)、SysDiff (Microsoft) 之類的應用程序在安裝應用程序之前 獲取文件系統和注冊表的快照,然後在安裝之後 獲取文件系統和注冊表的快照,並且提供有關二者之間差異的報告 — 這可以協助確定應該在組件中包含哪些文件。請注意,在安裝應用程序時已經在運行的應用程序和服務也可能對文件系統和注冊表進行更改。
下面是已在我的開發 PC 上使用的工具列表,從而確定應該在我的自定義組件中包含哪些文件/注冊表項 — 我將通過本文稍後介紹的過程中的各個步驟來解釋每種工具的用法。
• InCtrl5 — 用於獲取文件系統和注冊表的快照,並且提供差異列表 (ZDNet)
• Dumpbin — 用於確定應用程序/DLL 使用了哪些 DLL (Microsoft Visual Studio .Net)
• Depends — 也可以用於確定應用程序使用了哪些 DLL(以及 API)
• RegMon — 動態監控對注冊表所做的更改 (NT System Internals)
• FileMon — 動態監控文件系統 (NT System Internals)
• Windows XP Embedded 開發工具 — Target Analyzer Probe、Component Designer、Component Database Manager、Target Designer
在目標設備上使用的工具 使用上述工具來確定需要哪些文件和注冊表項只是難題的一部分。在已經生成 Windows XP Embedded 映像之後,應用程序還將需要接受測試以確保它能夠按預期工作 — 應用程序有可能動態加載 DLL 或者創建 COM 對象的實例,但無法使用 Dumpbin 或 Depends 捕獲這些信息。因此,在目標設備上需要一些調試工具。下面是已在我的目標設備上使用的工具列表(在部署最終的操作系統映像之前,應該刪除這些工具)。
• RegMon — 動態監控對注冊表所做的更改 (NT System Internals)
• FileMon — 動態監控文件系統 (NT System Internals)
在下一部分中,我將演練這些工具的用法。
綜述 過程概述
首先,讓我們扼要重述安全設備並列出可用的組件。我們的計劃是基於 Windows XP Embedded 生成安全設備。在該例中,我將使用 Toshiba Tecra 9000 膝上型電腦作為我的開發 PC,使用 Logitech USB Camera 和 Windows XP Embedded TimerShot PowerToy(有關該組件的下載位置,請參見本文末尾的鏈接)作為我的目標設備,並且使用前面提到的偵探工具包。
Toshiba 膝上型電腦具有兩個硬盤分區。主分區包含 Windows XP Professional 以及我的所有開發工具(Windows XP Embedded、Visual Studio .Net 等等),並且被格式化為 NTFS。我還具有一個大小為 700MB 的輔助分區(大小大概與光盤相等),並且被格式化為 FAT32。我已經修改了我的 BOOT.INI(它駐留在可啟動驅動器的根目錄中,以便為 Windows XP Embedded 添加輔助啟動選項 — 注意,Boot.ini 被配置為具有 System 和 Hidden 屬性) — Boot.ini 如下所示:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\Windows
[Operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP
Professional" /fastdetect
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Microsoft Windows XP
Embedded" /fastdetect
在啟動時,我得到了兩個選項:啟動到 Windows XP Professional(在我的主分區上),或者啟動到我的 Windows XP Embedded 映像(在我的輔助分區上)。在 30 秒鐘的超時以後,默認選項是啟動到 Windows XP Professional。
步驟 1 — 從安裝程序中捕獲信息
創建自定義組件的第一步是確定應用程序所需的文件和注冊表設置。安裝程序和偵探工具應該在 Windows XP Professional 上運行。可以針對完全配置的操作系統映像來運行和測試應用程序 — 本文稍後將針對 Windows XP Embedded 測試應用程序。
Windows XP PowerToys Web 站點列出了一些 PowerToy;單擊相應的鏈接以下載某個 PowerToy 時,將提示您選擇 Open、Save、Cancel 或 More Info。單擊“Save”可將 TimershotPowertoySetup.exe 程序保存到硬盤上。注意,選擇“Open”時將下載並安裝 PowerToy。此時,不需要捕獲安裝過程中的信息。
還將需要文件系統和注冊表快照工具。出於本文的目的,我已經選擇使用 ZDNet 提供的 Inctrl5,盡管還可以使用許多類似的工具。
以下為 Inctrl5 的外觀:安裝程序的位置被插入(在我的示例中為 c:\stuff\XP-PowerToys\TimershotPowertoySetup.exe),報告輸出位置被更改為指向我的安裝文件夾,然後我單擊 GO!。
圖 1.
InCtrl5 捕獲我的開發 PC 的注冊表和文件系統的快照,然後啟動 PowerToy 安裝程序。安裝過程完成後,將獲取第二個快照,並且生成一個報告。
經過編譯的報告將列出對文件系統、注冊表、INI 文件和文本文件(autoexec.nt 和 config.nt)所做的全部 更改 — 對於安裝 PowerToy 的情況,該報告包含在安裝 PowerToy 時正在