從 Office 自訂工具自訂檔案檢視 XML 內容

更新日期: 2008年6月

適用於: Office Resource Kit

 

上次修改主題的時間: 2015-03-09

系統管理員會使用 Office 自訂工具 (OCT),自訂 2007 Microsoft Office 系統 的安裝。自訂會儲存在安裝程式自訂檔案 (MSP 檔案) 中,該檔案會使用可延伸標記語言 (XML) 格式。本文將提供一個範例 Microsoft Visual Basic 指令碼,系統管理員可用以檢視儲存在 OCT MSP 檔案中的設定。

Windows Script Host 概觀

若要執行指令碼,可使用 Microsoft Windows Script Host (WSH),這是和語言無關的指令碼主機,可供與 Windows Script 相容的指令碼引擎使用。WSH 可讓您從 Windows 桌面及命令提示字元執行指令碼。

若要從 Windows 執行指令碼,WScript.exe 提供 Windows 架構的對話方塊,可用以設定指令碼內容。若要從命令提示字元執行指令碼,CScript.exe 提供可用以設定指令碼內容的命令列參數。

WSH 提供指令碼的拖放支援。這表示您可以將檔案拖曳至 WSH 指令碼中。檔案名稱會轉譯至命令列的引數中。

如需 WSH 的詳細資訊,請參閱 MSDN 網站上的下列資源:

ExtractOctXml.vbs 指令碼範例

下列各節會提供範例 Visual Basic 指令碼 ExtractOctXml.vbs,以及使用指令碼從 OCT MSP 自訂檔案擷取 XML 中繼資料的指示。

若要儲存指令碼範例,請開啟 [記事本] 之類的文字編輯器、複製本節中的指令碼,並將指令碼貼至檔案中。將指令碼檔案儲存為 ExtractOctXml.vbs。

' Utility to extract the metadata from an Office 2007 customization patch 
' For use with Windows Scripting Host, CScript.exe or WScript.exe
' Copyright (c) Microsoft Corporation. All rights reserved.
'
Option Explicit

Const msiOpenDatabaseModePatchFile = 32
Const msiOpenDatabaseModeReadOnly     = 0
Const msiReadStreamBytes = 1

Const ForWriting = 2
Const TristateTrue = -1

Dim pathOCT_Patch 'As String
Dim pathMetadataXml 'As String
Dim sMetadata 'As String
Dim wshShell 'As Wscript.Shell
Dim fso 'As FileSystemObject
Dim fileOutput 'As File
Dim sErrSection ' As String


sErrSection = "ArgCheck"
' Check arg count, and display help if argument not present or contains ?
Dim argCount:argCount = Wscript.Arguments.Count
If argCount > 0 Then If InStr(1, Wscript.Arguments(0), "?", vbTextCompare) > 0 Then argCount = 0
If (argCount = 0) Then
    Wscript.Echo "Office 2007 OCT Metadata Extract utility" & _
        vbNewLine & " You must supply the location of the Office 2007 customization patch " & _
        vbNewLine & _
        vbNewLine & "Copyright (C) Microsoft Corporation.  All rights reserved."
    Wscript.Quit 1
Else
    pathOCT_Patch = Trim(Wscript.Arguments(0))
End If


sErrSection = "FSO"
' Create FileSystemObject and verify file exists
Set fso = CreateObject("Scripting.FileSystemObject") : CheckError
If Not fso.FileExists(pathOCT_Patch) Then Err = 2 : CheckError


sErrSection = "WI"
' Connect to Windows Installer object
On Error Resume Next
Dim wi : Set wi = Nothing
Set wi = Wscript.CreateObject("WindowsInstaller.Installer") : CheckError


sErrSection = "Read Metadata"
' Open OCT patch and read the metadata stream
Dim wiStorage, vw, rec
Set wiStorage = wi.OpenDatabase(pathOCT_Patch, msiOpenDatabaseModePatchFile) : CheckError
Set vw = wiStorage.OpenView("SELECT * FROM _Streams WHERE `Name`='metadata' ") : CheckError
vw.Execute
Set rec = vw.Fetch
If Not rec Is Nothing Then
    sMetadata = rec.ReadStream(2, rec.DataSize(2), msiReadStreamBytes)
Else
    Wscript.Echo "No Metadata stream was found in this file: " & pathOCT_Patch
    Wscript.Quit 2
End If

Set wiStorage = Nothing
Set rec = Nothing: Set vw = Nothing
Set wi = Nothing


sErrSection = "Write Metadata"
' Write the metadata stream to a temp file
Set wshShell = CreateObject("WScript.Shell") : CheckError
pathMetadataXml = wshShell.ExpandEnvironmentStrings("%temp%") & "\" & fso.GetFileName(pathOCT_Patch) & ".xml"
Set fileOutput = fso.OpenTextFile(pathMetadataXml, ForWriting, True, -1) : CheckError
fileOutput.WriteLine sMetadata 
fileOutput.Close

Set fileOutput = Nothing: Set fso = Nothing

sErrSection = "Show Metadata"
' Launch Metadata in IE
wshShell.Run "iexplore.exe " & pathMetadataXml 

    
    
Sub CheckError
Dim sMsg, errRec
    If Err = 0 Then Exit Sub
    sMsg = sErrSection & vbNewLine & Err.Source & " " & Hex(Err) & ": " & Err.Description
    If Not wi Is Nothing Then
    Set errRec = wi.LastErrorRecord
        If Not errRec Is Nothing Then sMsg = sMsg & vbNewLine & errRec.FormatText
    End If
    Wscript.Echo sMsg
    Wscript.Quit 2
End Sub

Sub NoMetadata
End Sub

執行指令碼

ExtractOctXml.vbs 檔可儲存至您電腦上的任一處。若要使用 ExtractOctXml.vbs 指令碼,只需將 OCT MSP 自訂檔案拖放至指令碼中。指令碼會將中繼資料 XML 擷取至使用者的 Temp 資料夾以成為 <OCT 修補程式的名稱>.xml。接著會將 XML 檔案傳送至 Internet Explorer 以供檢視。

執行指令碼

  1. 使用 [Windows 檔案總管] 來開啟包含 ExtractOctXml.vbs 檔的資料夾。

  2. 將要檢視的 MSP 檔案複本拖放至 [Windows 檔案總管] 視窗中所顯示的 ExtractOctXml.vbs 中。

  3. 在 XML 檔案開啟之後,您可以展開和摺疊不同的區段,以檢視 MSP 自訂檔案中所含的設定。

    Metadata.xml 檔的 <UserSettings> 元素會包含 MSP 自訂檔案中所設定的使用者設定,而 metadata.xml 檔的 <Options> 元素會包含與功能狀態相關的設定。

使用命令列執行指令碼

  1. 依序按一下 [開始] 和 [執行],然後輸入 cmd

  2. 在命令視窗中,輸入:

    cscript <指令碼路徑> \ExtractOCTXml.vbs <OCT MSP 路徑和檔案名稱>

    -或-

    wscript <指令碼路徑> \ExtractOCTXml.vbs <OCT MSP 路徑和檔案名稱>

    XML 檔案會載入 Internet Explorer 以供檢視。

檢視 MSP 自訂檔案的 XML 內容

OCT 會使用設定 (OPA) 檔案,在 OCT 中填入 [修改使用者設定] 使用者介面,並在安裝期間新增適當的登錄機碼和值。Office 2007 設定 OPA 檔案會儲存在位於 Office 2007 來源檔案位置或 CD 之根目錄上的 Admin 資料夾中。

下表說明 MSP metadata.xml 檔中所包含的最上層區段。

區段 描述

<Customization baseFolder>

提供 MSP 自訂檔案名稱和路徑資訊。這些元素均供程式碼內部使用;他們不代表實際的自訂。

<Product id>

提供本機安裝來源套件、安裝狀態 (例如,必須安裝)、語言 MUI 套件、產品識別碼、功能和識別碼、捷徑及可升級應用程式的相關資訊。

這些元素均供程式碼內部使用;他們不代表實際的自訂。

<SecurityApps>

列出具有特定安全性位置的應用程式,如同可在 OCT 中 [安裝程式\Office 安全性設定] 之 [新增下列路徑到信任的位置清單] 區域中找到的下拉式清單上所示。

這些元素均供程式碼內部使用;他們不代表實際的自訂。

<SecurityAppSettings>

列出會在 OCT 之 [安裝程式\Office 安全性設定] 區域中出現的安全性設定。此清單的自訂會出現在後述的 <SecuritySettings> 元素中。

這些元素均供程式碼內部使用;他們不代表實際的自訂。

<SecurityPossibleSettingValues>

列出 <SecurityAppSettings> 可用的安全性選項。

這些元素均供程式碼內部使用;他們不代表實際的自訂。

<GlobalSettings>

提供可在 OCT 之 [安裝程式\修改安裝程式內容] 區段中找到的安裝程式內容相關資訊。

<UserSettings>

提供任何已設定於 OCT 之 [功能\修改使用者設定] 區段中設定的相關資訊及登錄機碼資料。

<File>

提供任何使用 OCT 中 [其他內容\新增檔案] 或 [移除檔案] 選項來新增或移除的檔案相關資訊。

<Registry>

提供任何使用 OCT 中 [其他內容\新增登錄項目] 或 [移除登錄項目] 選項來新增或移除的登錄機碼相關資訊。

<Shortcuts>

提供使用 OCT 中 [其他內容\設定捷徑] 選項來新增的捷徑相關資訊。

<Install>

提供可在 OCT 之 [安裝程式\安裝位置及公司/組織名稱]、[安裝程式\其他網路來源] 及 [安裝程式\授權及使用者介面] 選項中找到的安裝設定相關資訊。

<ChildInstalls>

提供可在 OCT 之 [安裝程式\新增安裝並執行程式] 選項中找到的其他預先安裝動作相關資訊。

<Options>

包含與應用程式功能狀態相關的設定。

<SecuritySettings>

提供使用 OCT 之 [安裝程式\Office 安全性區段\預設安全性設定] 區段對預設安全性設定進行的變更相關資訊。

<SecurityTrustedLocations>

提供新增至 OCT 之 [安裝程式\Office 安全性設定] 選項中的信任位置相關資訊 (在 [新增下列路徑到信任的位置清單] 中)。

<SecurityCertificates>

提供新增至 OCT 之 [安裝程式\Office 安全性設定] 選項中的憑證相關資訊 (在 [新增下列數位憑證到信任的發行者清單] 中)。

<Outlook>

提供在 OCT 之 [Outlook] 選項中所進行的 [Outlook 設定檔] 自訂相關資訊。

下列範例會說明當您利用 OCT MSP 自訂檔案執行 ExtractOctXml.vbs 指令碼時,如何在 Internet Explorer 中開啟的結果 XML 檔案中尋找設定。

範例

這個範例會使用 Microsoft Office Professional 2007 Plus MSP 自訂檔案。只會安裝 Microsoft Office Access 2007,並將 Access 的預設檔案格式設定為 Access 2007。Access 的 [預設檔案格式] 使用者設定位於 OCT 中 [修改使用者設定] 畫面的 [Microsoft Office Access 2007\其他] 節點中。

您可以使用 [記事本] 之類的文字編輯器來開啟 Access 2007 OPA 設定檔案 access12.opa (位於 Office 2007 來源檔案位置的根目錄上,在 Admin 資料夾中)。搜尋 OCT 中所顯示的字串,以取得 [預設檔案格式] 使用者設定 (Default File Format)。這樣做將會顯示 access12.opa 檔的下列區段:

KEYNAME Software\Microsoft\Office\12.0\Access\Settings

PART !!L_Empty DROPDOWNLIST

VALUENAME "Default File Format"

ITEMLIST

NAME !!L_Access2007 VALUE NUMERIC 12 DEFAULT

NAME !!L_Access20022003 VALUE NUMERIC 10

END ITEMLIST

從這個使用者設定資訊,您可以判斷設定的登錄機碼 (在此案例中為 Software\Microsoft\Office\12.0\Access\Settings) 及可能的登錄值。若 Default File Format 的值為 12,會將預設檔案格式設定為 Access 2007,若 Default File Format 為 10,則會將預設檔案格式設定為 Access 2002-2003。

當您從 access12.opa 檔取得此資訊之後,即可搜尋自訂 metadata.xml 檔,以取得正在尋找的登錄機碼或值,例如 Software\Microsoft\Office\12.0\Access\Settings。在此範例中這樣做可讓您看見 metadata.xml 檔的下列區段:

<AddRegistries>

<AddRegistry root="HKCU" key="Software\Microsoft\Office\12.0\Access\Settings" name="Default File Format" emptykey="false" flags="0" type="0" value="12" guid="{2A044E97-7BB1-4644-BF84-A35A5B2E5D51}" />

使用 OPA 檔案的資訊,您可以看見 Default File Format 機碼的值為 12,這會將預設檔案格式設定為 Access 2007。

在此範例中,XML 檔案的 <Options> 區段看起來會類似下列摘錄:

<Option id="ACCESSFiles" installState="3" />

<Option id="Access_PIA" installState="3" />

<Option id="AccessWizards" installState="3" />

<Option id="CalendarControl" installState="3" />

<Option id="DeveloperWizards" installState="3" />

<Option id="AccessHelpFiles" installState="3" />

<Option id="AccessTemplatesIntl" installState="3" />

<Option id="EXCELFiles" installState="1" />

.

.

<Option id="OUTLOOKFiles" installState="1" />

.

.

<Option id="PPTFiles" installState="1" />

如需 OptionState ID 的詳細資訊,請參閱<2007 Office 系統的 Config.xml 檔案>文章中的<OptionState 元素>小節。