UE-V 2.1 SP1 的應用程式範本架構參考
Microsoft 使用者體驗虛擬化 (UE-V) 2.1 SP1 會使用 XML 設定位置範本來定義 UE-V 擷取並套用的傳統型應用程式設定和 Windows 設定。 UE-V 包含一組預設設定位置範本。 您也可以使用 UE-V 產生器建立自訂設定位置範本。
進階使用者可以自定義設定位置範本的 XML 檔案。 本文詳細說明 UE-V 2.1 SP1 設定位置範本的 XML 結構,並提供編輯這些檔案的指引。
UE-V 2.1 SP1 應用程式範本架構參考
本節詳細說明 UE-V 2.1 SP1 設定位置範本的 XML 結構,並提供編輯此檔案的指引。
XML 宣告和編碼屬性
強制:True
類型:字串
XML 宣告必須指定 XML 1.0 版屬性 (<?xml version="1.0">
) 。 UE-V 產生器所建立的設定位置範本會以 UTF-8 編碼方式儲存,但未明確指定編碼。 建議您在此元素中包含 encoding=“UTF-8” 屬性,作為最佳做法。 產品隨附的所有範本也會指定此標記。 如需參考,請參閱 中 %ProgramFiles%\Microsoft User Experience Virtualization\Templates
的檔。
例如:
<?xml version="1.0" encoding="UTF-8"?>
命名空間和根元素
強制:True
類型:字串
UE-V 會針對所有應用程式使用 https://schemas.microsoft.com/UserExperienceVirtualization/2012/SettingsLocationTemplate
命名空間。
SettingsLocationTemplate
是根元素,且包含所有其他專案。 在所有樣本中使用此標記的參考 SettingsLocationTemplate
:
<SettingsLocationTemplate xmlns='https://schemas.microsoft.com/UserExperienceVirtualization/2012/SettingsLocationTemplate'>
數據類型
這些專案是 UE-V 應用程式範本架構的數據類型。
GUID:GUID 描述標準全域唯一標識碼 (GUID) 正則表示式 (格式的 regex)
\{[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\}
。 這個專案中Filesetting\Root\KnownFolder
會使用這個 GUID 來驗證已知資料夾的格式。FilenameString:FilenameString 是指要監視之進程的檔名。 下列正則表示式會限制其值:
[^\\\?\*\|<>/:]+
。 換句話說,它們不能包含下列字元:- 反斜杠字元 (
\
) - 星號 (
*
) - 問號 (
?
) - 管線字元 (
|
) - 大於符號 (
>
) - 小於符號 (
<
) - 正斜線 (
/
) - 冒號 (
:
)
- 反斜杠字元 (
IDString
:IDString
是指用來描述共用通用設定) 之應用程式套件 (Application 元素、SettingsLocationTemplate 和 Common 元素的標識符值。 其受限於與 FilenameString ()[^\\\?\*\|<>/:]+
相同的 regex。TemplateVersion:TemplateVersion 是用來描述設定位置範本修訂的整數值。 其值的範圍可以從 0 到 2147483647。
空白:空白是指 Null 值。 此數據會用於 Process\ShellProcess 中,以指出沒有要監視的進程。 此值不應該用於任何應用程式範本中。
作者:Author 數據類型是識別範本作者的複雜類型。 它包含兩個子專案:Name 和 Email。 在 Author 資料類型中,Name 元素是必要的,而 Email 專案是選擇性的。 此類型會在 SettingsLocationTemplate 元素下更詳細地描述。
範圍:Range 會定義由兩個子元素組成的整數類別: 最小 值和 最大值。 此數據類型是在 ProcessVersion 數據類型中實作。 如果指定,則必須同時包含Minimum和 Maximum值。
ProcessVersion:P rocessVersion 會定義具有四個子元素的類型: Major、 Minor、 Build 和 Patch。 Process 元素會使用此數據類型來填入其 ProductVersion 和 FileVersion 值。 此類型的數據是 Range 值。 Major 子專案是必要專案,其他專案則是選擇性的。
架構:架構會列舉兩個可能的值: Win32 和 Win64。 這些值可用來指定進程架構。
進程:P rocess數據類型是用來描述 UE-V 要監視之進程的容器。 它包含六個子元素:Filename、Architecture、ProductName、FileDescription、ProductVersion 和 FileVersion。 下表詳細說明每個元素的個別資料類型:
元素 | 資料類型 | Mandatory |
---|---|---|
檔名 | FilenameString | True |
Architecture | Architecture | False |
ProductName | 字串 | False |
FileDescription | 字串 | False |
ProductVersion | ProcessVersion | False |
FileVersion | ProcessVersion | False |
進程:P rocess數據類型代表一或多個 Process 元素集合的容器。 Process 序列類型支援兩個子元素: Process 和 ShellProcess。 Process 是 Process 類型的元素,而 ShellProcess 的數據類型為 Empty。 順序中至少必須識別一個專案。
路徑:RegistrySetting 和 FileSetting 會使用路徑來參考登錄和檔案路徑。 此元素支援兩個選擇性屬性: Recursive 和 DeleteIfNotFound。 這兩個值都設定為 default=“False”。
遞歸表示檔案設定包含路徑和所有子資料夾,或登錄設定包含所有子登錄機碼。 在這兩種情況下,目前層級的所有專案都會包含在擷取的數據中。 針對 FileSettings 物件,指定資料夾內的所有檔案都會包含在 UE-V 所擷取的數據中,但不包含資料夾。 針對登錄路徑,會擷取目前路徑中的所有值,但不會擷取子登錄機碼。 在這兩種情況下,請小心避免擷取大型數據集或大量專案。
DeleteIfNotFound 屬性會從使用者的設定記憶體路徑數據中移除設定。 如果從封裝中移除這些設定會在設定記憶體路徑檔伺服器上節省大量磁碟空間,這個屬性就很有用。
FileMask:FileMask 只會指定 Path 屬性所定義資料夾的特定文件類型。 例如,Path 可能是
C:\users\username\files
,而 FileMask 可以*.txt
只包含文字檔。RegistrySetting:RegistrySetting 代表登錄機碼和值的容器,以及 UE-V 代理程式部分的相關聯所需行為。 此類型中定義了四個子元素: Path、 Name、 Exclude,以及 Path 和 Name值的序列。
FileSetting:FileSetting 包含與檔案和檔案路徑相關聯的參數。 定義了四個子元素: Root、 Path、 FileMask 和 Exclude。 Root 是必要專案,其他則為選擇性。
設定:[設定] 屬性是套用至特定範本之所有設定的容器。 它包含稍早所述登錄、檔案、SystemParameter 和 CustomAction 設定的實例。 此外,它也可以包含下列子元素,其中包含所述的行為:
元素 | 描述 |
---|---|
非同步 | 異步設定套件會在不封鎖應用程式啟動的情況下套用,讓應用程式在仍然套用設定時繼續啟動。 此元素適用於可異步套用的設定,例如 get/set 透過 API 套用的設定,例如 SystemParameterSetting。 |
PreventOverlappingSynchronization | 根據預設,當使用範本的應用程式最後一個實例關閉時,UE-V 只會儲存應用程式的設定。 當此元素設定為 false 時,即使應用程式的其他實例正在執行,UE-V 也會匯出設定。 隨附於 UE-V 的適用範本 - 包含 Common 元素區段的範本會使用此旗標,讓共用設定一律會在應用程式關閉時匯出,同時防止應用程式特定設定導出,直到最後一個實例關閉為止。 |
AlwaysApplySettings | 這個參數會強制套用匯入的設定套件,即使套件與應用程式的目前狀態之間沒有任何差異。 此參數只能在特殊情況下使用,因為它可以降低設定匯入的速度。 |
Name 元素
強制:True
類型:字串
Name 會指定設定位置範本的唯一名稱。 當參考 WMI、PowerShell、事件檢視器 和偵錯記錄中的範本時,這會用於顯示用途。 一般而言,請避免參考版本資訊,因為這可以從 ProductVersion 元素進行物件化。 例如,指定 <Name>My Application</Name>
而不是 <Name>My Application 1.1</Name>
。
注意
UE-V 不會參考外部 DTD,因此無法在設定位置範本中使用具名實體。 例如,請勿使用 ®
來參照已註冊的商標 () ®
。 相反地,請使用標準編號參考來包含這些類型的特殊字元,例如註冊 ®
的商標字元 (®
) 。 此規則適用於本檔中的所有字串值。
如需字元實體的完整清單,請參閱 W3 XHTML 1.0 - DTD。 UTF-8 編碼的檔可能直接包含 Unicode 字元。 透過 UE-V 產生器儲存範本會自動將字元實體轉換成其 Unicode 表示法。
ID 元素
強制:True
類型:字串
標識碼會填入特定範本的唯一標識碼。 例如,此標記會成為 UE-V 代理程式在運行時間用來參考範本的主要標識碼 (例如,請參閱 Get-UevTemplate 的輸出,Get-UevTemplateProgram PowerShell Cmdlet) 。 依照慣例,此標記不應包含任何可簡化腳本的空格。 此元素中應指定應用程式的版本號碼,以便輕鬆識別範本,例如 <ID>MicrosoftCalculator6</ID>
或 <ID>MicrosoftOffice2010Win64</ID>
。
Version 元素
強制:True
類型:整數
最小值:0
最大值:2147483647
版本會識別用於管理變更追蹤的設定位置範本版本。 每次儲存範本時,UE-V 產生器會自動將此數位遞增一。 請注意,此欄位必須是整數整數;不允許小數值,例如 <Version>2.5</Version>
。
提示
您可以使用 XML 註標記儲存版本變更的 <!-- -->
相關附註,例如:
<!--
Version History
Version 1 Jul 05, 2012 Initial template created by Generator - Denise@Contoso.com
Version 2 Jul 31, 2012 Added support for app.exe v2.1.3 - Mark@Contoso.com
Version 3 Jan 01, 2013 Added font settings support - Mark@Contoso.com
Version 4 Jan 31, 2013 Added support for plugin settings - Tony@Contoso.com
-->
<Version>4</Version>
重要
系統會查詢此值,以判斷是否應該將新版本的範本套用至這些實例中的現有範本:
當排程的範本自動更新工作執行時。
當 Update-UevTemplate 執行 PowerShell Cmdlet 時。
microsoft\uev:SettingsLocationTemplate
透過 WMI 呼叫 Update 方法時。
Author 元素
強制:False
類型:字串
作者會識別設定位置範本的建立者。 支援兩個選擇性子專案:名稱和 Email。 這兩個屬性都是選擇性的,但如果指定 Email 子專案,則必須伴隨 Name 元素。 Author 是指設定位置範本的聯繫人完整名稱,而電子郵件應參考作者的電子郵件位址。 建議您在公開發佈的範本中包含這項資訊。
進程和處理專案
強制:True
類型:元素
Processes 元素至少包含一個<Process>
元素,接著包含下列子元素:Filename、Architecture、ProductName、FileDescription、ProductVersion 和 FileVersion。 Filename 子專案是必要專案,其他專案則是選擇性的。 完整填入的專案包含類似此範例的標記:
<Process>
<Filename>MyApplication.exe</Filename>
<Architecture>Win64</Architecture>
<ProductName> MyApplication </ProductName>
<FileDescription>MyApplication.exe</FileDescription>
<ProductVersion>
<Major Minimum="2" Maximum="2" />
<Minor Minimum="0" Maximum="0" />
<Build Minimum="0" Maximum="0" />
<Patch Minimum="5" Maximum="5" />
</ProductVersion>
<FileVersion>
<Major Minimum="2" Maximum="2" />
<Minor Minimum="0" Maximum="0" />
<Build Minimum="0" Maximum="0" />
<Patch Minimum="5" Maximum="5" />
</FileVersion>
</Process>
檔名
強制:True
類型:字串
檔名是指文件系統中出現的可執行文件實際檔名。 此元素會指定 UE-V 用來評估範本是否適用於進程的主要準則。 此元素必須在設定位置範本 XML 中指定。
有效的檔名無法符合下列正則表達式: [^\\\?\*\|<>/:]+
。 換句話說,它們不能包含下列字元:
- 反斜杠字元 (
\
) - 星號 (
*
) - 問號 (
?
) - 管線字元 (
|
) - 大於符號 (
>
) - 小於符號 (
<
) - 正斜線 (
/
) - 冒號 (
:
)
提示
若要針對此 regex 測試字串,請使用 PowerShell 命令視窗,並將可執行檔的名稱取代為 YourFileName:
"YourFileName.exe" -match "[\\\?\*\|<>/:]+"
True 值表示字串包含不合法的字元。 以下是一些不合法值的範例:
\\server\share\program.exe
Program*.exe
Pro?ram.exe
Program<1>.exe
注意
UE-V 產生器會分別將大於和小於字元編碼為 >
和 <
。
在罕見的情況下,FileName 值不一定會包含 .exe 擴展名,但應指定為值的一部分。 例如, <Filename>MyApplictication.exe</Filename>
應該指定 , 而不是 <Filename>MyApplictication</Filename>
。 如果可執行檔的實際名稱是 MyApplication.exe
,則第二個範例不會將範本套用至進程。
Architecture
強制:False
類型:架構 (字串)
架構是指已編譯目標可執行文件的處理器架構。 有效值為32位應用程式的 Win32 或 64 位應用程式的 Win64。 如果存在,此標籤會將設定位置範本的適用性限製為特定應用程式架構。 例如,比較 UE-V 隨附的 %ProgramFiles%\Microsoft User Experience Virtualization\templates\MicrosoftOffice2010Win32.1SP1.xml
和 MicrosoftOffice2010Win64.xml
檔案。 當不同版本的可執行檔之間有相對路徑變更,或在從某個處理器架構移至另一個處理器架構時新增或移除設定時,這非常有用。
如果此元素不存在,則設定位置範本會忽略進程的架構,並在套用檔名和其他屬性時同時套用至 32 位和 64 位進程。
注意
UE-V 在此版本中不支援ARM處理器。
ProductName
強制:False
類型:字串
ProductName 是選擇性元素,用來識別用於系統管理用途或報告的產品。 ProductName 與 Filename 不同,因為其值沒有正則表示式限制。 這可讓您更輕鬆地瞭解可執行檔名稱不明顯的進程描述。 例如:
<Process>
<Filename>MyApplication.exe</Filename>
<ProductName>My Application 6.x by Contoso.com</ProductName>
<ProductVersion>
<Major Minimum="6" Maximum="6" />
</ProductVersion>
</Process>
FileDescription
強制:False
類型:字串
FileDescription 是選擇性標籤,允許可執行文件的系統管理描述。 這是一個可用的文字欄位,有助於區分軟體套件內需要識別可執行檔功能的多個可執行檔。
例如,在適合的應用程式中,提供兩個可執行檔 (MyApplication.exe 和 MyApplicationHelper.exe) 函式的提醒可能很有用,如下所示:
<Processes>
<Process>
<Filename>MyApplication.exe</Filename>
<FileDescription>My Application Main Engine</ FileDescription>
<ProductVersion>
<Major Minimum="6" Maximum="6" />
</ProductVersion>
</Process>
<Process>
<Filename>MyApplicationHelper.exe</Filename>
<FileDescription>My Application Background Process Executable</FileDescription>
<ProductVersion>
<Major Minimum="6" Maximum="6" />
</ProductVersion>
</Process>
</Processes>
ProductVersion
強制:False
類型:字串
ProductVersion 是指檔案的主要和次要產品版本,以及組建和修補程式層級。 ProductVersion 是選擇性元素,但如果指定,它至少必須包含Major子專案。 值必須以Minimum=“X” Maximum=“Y” 格式表示範圍,其中 X 和 Y 是整數。 [最小值] 和 [最大值] 可以完全相同。
產品和檔案版本元素可以保持未指定。 這樣做會使範本版本無從驗證,這表示範本會套用至指定可執行檔的所有版本。
範例 1:產品 1.0 版
產品版本:UE-V 產生器中指定的 1.0 會產生下列 XML:
<ProductVersion>
<Major Minimum="1" Maximum="1" />
<Minor Minimum="0" Maximum="0" />
</ProductVersion>
範例 2:產品版本 5.0.2.1000
檔案版本:UE-V 產生器中指定的 5.0.2.1000 會產生下列 XML:
<FileVersion>
<Major Minimum="5" Maximum="5" />
<Minor Minimum="0" Maximum="0" />
<Build Minimum="2" Maximum="2" />
<Patch Minimum="1000" Maximum="1000" />
</FileVersion>
不正確的範例 1 - 不完整的範圍
只有 Minimum 屬性存在。 範圍中也必須包含最大值。
<ProductVersion>
<Major Minimum="2" />
</ProductVersion>
不正確的範例 2 - 未指定 Major 元素的次要
只有 Minor 元素存在。 也必須包含Major。
<ProductVersion>
<Minor Minimum="0" Maximum="0" />
</ProductVersion>
FileVersion
強制:False
類型:字串
FileVersion 會區分已發行應用程式的發行版和元件可執行檔的內部組建詳細數據。 對於大部分的商業應用程式而言,這些數位都相同。 在不同之處,檔案的產品版本表示檔案的一般版本識別,而檔案版本則表示檔案的特定組建 (如 Hotfix 或更新) 。 這可唯一識別檔案,而不會中斷偵測邏輯。
若要判斷特定可執行文件的產品版本和檔案版本,請以滑鼠右鍵按兩下 Windows 檔案總管中的檔案,選取 [屬性],然後在 [詳細數據] 索引標籤上選取。
包含應用程式的 FileVersion 元素可提供更細微的微調偵測邏輯,但對於大部分的應用程式而言並非必要。 會先檢查 ProductVersion 元素設定,然後再核取 FileVersion。 套用的限制越大。
FileVersion 的子元素和語法規則與 ProductVersion 的子元素和語法規則相同。
<Process>
<Filename>MSACCESS.EXE</Filename>
<Architecture>Win32</Architecture>
<ProductVersion>
<Major Minimum="14" Maximum="14" />
<Minor Minimum="0" Maximum="0" />
</ProductVersion>
<FileVersion>
<Major Minimum="14" Maximum="14" />
<Minor Minimum="0" Maximum="0" />
</FileVersion>
</Process>
應用程式元素
應用程式是適用於特定應用程式之設定的容器。 它是下列欄位/類型的集合。
欄位/類型 | 描述 |
---|---|
Name | 指定設定位置範本的唯一名稱。 當參考 WMI、PowerShell、事件檢視器 和偵錯記錄中的範本時,這會用於顯示用途。 如需詳細資訊,請參閱 名稱。 |
識別碼 | 填入特定範本的唯一標識符。 此標籤會成為 UE-V 代理程式在運行時間用來參考範本的主要識別碼。 如需詳細資訊,請參閱 標識符。 |
描述 | 範本的選擇性描述。 |
LocalizedNames | 在UI中顯示的選擇性名稱,由語言地區設定當地語系化。 |
LocalizedDescriptions | 依語言地區設定本地化的選擇性範本描述。 |
版本 | 識別用於管理變更追蹤的設定位置範本版本。 如需詳細資訊,請參閱 版本。 |
DeferToMSAccount | 控制是否使用Microsoft帳戶啟用此範本。 如果已為電腦上的用戶啟用 MSA 同步處理,則會自動停用此範本。 |
DeferToOffice365 | 與 MSA 類似,這會控制是否使用 Office365 啟用此範本。 如果 Office 365 用來同步設定,則會自動停用此範本。 |
FixedProfile | 指定此範本只能與這個專案內指定的配置文件相關聯,且無法透過WMI或PowerShell變更。 |
處理程序 | 一或多個 Process 元素集合的容器。 如需詳細資訊,請參閱 進程。 |
設定 | 適用於特定範本之所有設定的容器。 它包含登錄、檔案、SystemParameter 和 CustomAction 設定的實例。 如需詳細資訊, 請參 閱 數據類型的設定。 |
Common 元素
Common 類似於 Application 元素,但一律會與兩個或多個 Application 元素相關聯。 Common 區段代表這些應用程式實例之間共用的一組設定。 它是下列欄位/類型的集合。
欄位/類型 | 描述 |
---|---|
Name | 指定設定位置範本的唯一名稱。 當參考 WMI、PowerShell、事件檢視器 和偵錯記錄中的範本時,這會用於顯示用途。 如需詳細資訊,請參閱 名稱。 |
識別碼 | 填入特定範本的唯一標識符。 此標籤會成為 UE-V 代理程式在運行時間用來參考範本的主要識別碼。 如需詳細資訊,請參閱 標識符。 |
描述 | 範本的選擇性描述。 |
LocalizedNames | 在UI中顯示的選擇性名稱,由語言地區設定當地語系化。 |
LocalizedDescriptions | 依語言地區設定本地化的選擇性範本描述。 |
版本 | 識別用於管理變更追蹤的設定位置範本版本。 如需詳細資訊,請參閱 版本。 |
DeferToMSAccount | 控制是否使用Microsoft帳戶啟用此範本。 如果已為電腦上的用戶啟用 MSA 同步處理,則會自動停用此範本。 |
DeferToOffice365 | 與 MSA 類似,這會控制是否使用 Office365 啟用此範本。 如果 Office 365 用來同步設定,則會自動停用此範本。 |
FixedProfile | 指定此範本只能與這個專案內指定的配置文件相關聯,且無法透過WMI或PowerShell變更。 |
設定 | 適用於特定範本之所有設定的容器。 它包含登錄、檔案、SystemParameter 和 CustomAction 設定的實例。 如需詳細資訊, 請參 閱 數據類型的設定。 |
SettingsLocationTemplate 元素
此元素會定義單一應用程式或應用程式套件的設定。
欄位/類型 | 描述 |
---|---|
Name | 指定設定位置範本的唯一名稱。 當參考 WMI、PowerShell、事件檢視器 和偵錯記錄中的範本時,這會用於顯示用途。 如需詳細資訊,請參閱 名稱。 |
識別碼 | 填入特定範本的唯一標識符。 此標籤會成為 UE-V 代理程式在運行時間用來參考範本的主要識別碼。 如需詳細資訊,請參閱 標識符。 |
描述 | 範本的選擇性描述。 |
LocalizedNames | 在UI中顯示的選擇性名稱,由語言地區設定當地語系化。 |
LocalizedDescriptions | 依語言地區設定本地化的選擇性範本描述。 |
附錄:SettingsLocationTemplate.xsd
以下是 SettingsLocationTemplate.xsd 檔案,其中顯示其元素、子元素、屬性和參數:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="UevSettingsLocationTemplate"
targetNamespace="https://schemas.microsoft.com/UserExperienceVirtualization/2013A/SettingsLocationTemplate"
elementFormDefault="qualified"
xmlns="https://schemas.microsoft.com/UserExperienceVirtualization/2013A/SettingsLocationTemplate"
xmlns:mstns="https://schemas.microsoft.com/UserExperienceVirtualization/2013A/SettingsLocationTemplate"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="Guid">
<xs:restriction base="xs:string">
<xs:pattern value="\{[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\}" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="FilenameString">
<xs:restriction base="xs:string">
<xs:pattern value="[^\\\?\*\|<>/:]+" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="IDString">
<xs:restriction base="xs:string">
<xs:pattern value="[^\\\?\*\|<>/:.]+" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="CompositeIDString">
<xs:restriction base="xs:string">
<xs:pattern value="[^\\\?\*\|<>/:.]+([.][^\\\?\*\|<>/:.]+)?" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TemplateVersion">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0" />
<xs:maxInclusive value="2147483647" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="Empty">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="LocalizedString">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Locale" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="LocalizedName">
<xs:sequence>
<xs:element name="Name" type="LocalizedString" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="LocalizedDescription">
<xs:sequence>
<xs:element name="Description" type="LocalizedString" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="ReplacedTemplates">
<xs:sequence>
<xs:element name="ID" type="CompositeIDString" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Author">
<xs:all>
<xs:element name="Name" type="xs:string" minOccurs="1" />
<xs:element name="Email" type="xs:string" minOccurs="0" />
</xs:all>
</xs:complexType>
<xs:complexType name="Range">
<xs:attribute name="Minimum" type="xs:integer" use="required"/>
<xs:attribute name="Maximum" type="xs:integer" use="required"/>
</xs:complexType>
<xs:complexType name="ProcessVersion">
<xs:sequence>
<xs:element name="Major" type="Range" minOccurs="1" />
<xs:element name="Minor" type="Range" minOccurs="0" />
<xs:element name="Build" type="Range" minOccurs="0" />
<xs:element name="Patch" type="Range" minOccurs="0" />
</xs:sequence>
</xs:complexType>
<xs:simpleType name="Architecture">
<xs:restriction base="xs:string">
<xs:enumeration value="Win32"/>
<xs:enumeration value="Win64"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="Process">
<xs:sequence>
<xs:element name="Filename" type="FilenameString" minOccurs="1" />
<xs:element name="Architecture" type="Architecture" minOccurs="0" />
<xs:element name="ProductName" type="xs:string" minOccurs="0" />
<xs:element name="FileDescription" type="xs:string" minOccurs="0" />
<xs:element name="ProductVersion" type="ProcessVersion" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="FileVersion" type="ProcessVersion" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Processes">
<xs:sequence>
<xs:choice minOccurs="1">
<xs:element name="Process" type="Process" />
<xs:element name="ShellProcess" type="Empty" />
</xs:choice>
<xs:element name="Process" type="Process" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Path">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Recursive" type="xs:boolean" default="false"/>
<xs:attribute name="DeleteIfNotFound" type="xs:boolean" default="false"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="RegistrySetting">
<xs:sequence>
<xs:element name="Path" type="Path" />
<xs:element name="Name" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="Exclude" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Path" type="Path" minOccurs="0" />
<xs:element name="Name" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="FileSetting">
<xs:sequence>
<xs:element name="Root">
<xs:complexType>
<xs:choice>
<xs:element name="KnownFolder" type="Guid" />
<xs:element name="RegistryEntry" type="xs:string" />
<xs:element name="EnvironmentVariable" type="xs:string" />
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="Path" minOccurs="0" type="Path" />
<xs:element name="FileMask" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="Exclude" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Path" type="Path" minOccurs="0" />
<xs:element name="FileMask" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="CustomActionSetting">
<xs:restriction base="xs:anyURI"/>
</xs:simpleType>
<xs:simpleType name="SystemParameterSetting">
<xs:restriction base="xs:string">
<!-- Accessibility parameters -->
<xs:enumeration value="AccessTimeout"/>
<xs:enumeration value="AudioDescription"/>
<xs:enumeration value="ClientAreaAnimation"/>
<xs:enumeration value="DisableOverlappedContent"/>
<xs:enumeration value="FilterKeys"/>
<xs:enumeration value="FocusBorderHeight"/>
<xs:enumeration value="FocusBorderWidth"/>
<xs:enumeration value="HighContrast"/>
<xs:enumeration value="MessageDuration"/>
<xs:enumeration value="MouseClickLock"/>
<xs:enumeration value="MouseClickLockTime"/>
<xs:enumeration value="MouseKeys"/>
<xs:enumeration value="MouseSonar"/>
<xs:enumeration value="MouseVanish"/>
<xs:enumeration value="ScreenReader"/>
<xs:enumeration value="ShowSounds"/>
<xs:enumeration value="SoundSentry"/>
<xs:enumeration value="StickyKeys"/>
<xs:enumeration value="ToggleKeys"/>
<!-- Input parameters -->
<xs:enumeration value="Beep"/>
<xs:enumeration value="BlockSendInputResets"/>
<xs:enumeration value="DefaultInputLang"/>
<xs:enumeration value="DoubleClickTime"/>
<xs:enumeration value="DoubleClkHeight"/>
<xs:enumeration value="DoubleClkWidth"/>
<xs:enumeration value="KeyboardCues"/>
<xs:enumeration value="KeyboardDelay"/>
<xs:enumeration value="KeyboardPref"/>
<xs:enumeration value="KeyboardSpeed"/>
<xs:enumeration value="Mouse"/>
<xs:enumeration value="MouseButtonSwap"/>
<xs:enumeration value="MouseHoverHeight"/>
<xs:enumeration value="MouseHoverTime"/>
<xs:enumeration value="MouseHoverWidth"/>
<xs:enumeration value="MouseSpeed"/>
<xs:enumeration value="MouseTrails"/>
<xs:enumeration value="SnapToDefButton"/>
<xs:enumeration value="WheelScrollChars"/>
<xs:enumeration value="WheelScrollLines"/>
<!-- Desktop parameters (limited subset) -->
<xs:enumeration value="DeskWallpaper"/>
<xs:enumeration value="DesktopColor"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="Settings">
<xs:sequence>
<xs:element name="Asynchronous" type="xs:boolean" minOccurs="0" />
<xs:element name="PreventOverlappingSynchronization" type="xs:boolean" minOccurs="0" />
<xs:element name="AlwaysApplySettings" type="xs:boolean" minOccurs="0" />
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Registry" type="RegistrySetting" />
<xs:element name="File" type="FileSetting" />
<xs:element name="SystemParameter" type="SystemParameterSetting" />
<xs:element name="CustomAction" type="CustomActionSetting" />
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Common">
<xs:sequence>
<xs:element name="Name" type="xs:string" />
<xs:element name="ID" type="IDString" />
<xs:element name="ReplacedTemplates" type="ReplacedTemplates" minOccurs="0" />
<xs:element name="Description" type="xs:string" minOccurs="0" />
<xs:element name="LocalizedNames" type="LocalizedName" minOccurs="0" />
<xs:element name="LocalizedDescriptions" type="LocalizedDescription" minOccurs="0" />
<xs:element name="Version" type="xs:integer" />
<xs:element name="DeferToMSAccount" type="Empty" minOccurs="0" />
<xs:element name="DeferToOffice365" type="Empty" minOccurs="0" />
<xs:element name="Settings" type="Settings" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Application">
<xs:sequence>
<xs:element name="Name" type="xs:string" />
<xs:element name="ID" type="IDString" />
<xs:element name="ReplacedTemplates" type="ReplacedTemplates" minOccurs="0" />
<xs:element name="Description" type="xs:string" minOccurs="0" />
<xs:element name="LocalizedNames" type="LocalizedName" minOccurs="0" />
<xs:element name="LocalizedDescriptions" type="LocalizedDescription" minOccurs="0" />
<xs:element name="Version" type="xs:integer" />
<xs:element name="DeferToMSAccount" type="Empty" minOccurs="0" />
<xs:element name="DeferToOffice365" type="Empty" minOccurs="0" />
<xs:element name="Processes" type="Processes" />
<xs:element name="Settings" type="Settings" />
</xs:sequence>
</xs:complexType>
<xs:element name="SettingsLocationTemplate">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" />
<xs:element name="ID" type="IDString" />
<xs:element name="Description" type="xs:string" minOccurs="0" />
<xs:element name="LocalizedNames" type="LocalizedName" minOccurs="0" />
<xs:element name="LocalizedDescriptions" type="LocalizedDescription" minOccurs="0" />
<xs:choice>
<!-- Single application -->
<xs:sequence>
<xs:element name="ReplacedTemplates" type="ReplacedTemplates" minOccurs="0" />
<xs:element name="Version" type="TemplateVersion" />
<xs:element name="Author" type="Author" minOccurs="0" />
<xs:element name="FixedProfile" type="xs:string" minOccurs="0" />
<xs:element name="DeferToMSAccount" type="Empty" minOccurs="0" />
<xs:element name="DeferToOffice365" type="Empty" minOccurs="0" />
<xs:element name="Processes" type="Processes" />
<xs:element name="Settings" type="Settings" />
</xs:sequence>
<!-- Suite of applications -->
<xs:sequence>
<xs:element name="ManageSuiteOnly" type="xs:boolean" minOccurs="0" />
<xs:element name="Author" type="Author" minOccurs="0" />
<xs:element name="FixedProfile" type="xs:string" minOccurs="0" />
<xs:element name="Common" type="Common" />
<xs:element name="Application" type="Application" minOccurs="2" maxOccurs="unbounded" />
</xs:sequence>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- SettingsLocationTemplate -->
</xs:schema>