註冊副稽核應用程式的結構描述
副稽核應用程式必須完成註冊階段,您可以在 WMI 儲存機制中找到和註冊其結構描述。每個組件都必須進行結構描述發行。任何宣告副稽核型別 (事件或執行個體) 的組件都必須將其結構描述發行至 WMI。您可以使用 .NET Framework 中的標準安裝程式機制來完成這項作業。
首先,您必須先定義物件的安裝程式。如果您的專案不需使用任何安裝程式,您可以使用 System.Management.Instrumentation 中的預設管理安裝程式輔助器類別,然後使用程式碼從該類別中衍生:
[System.ComponentModel.RunInstaller(true)]
public class MyInstaller : DefaultManagementProjectInstaller {}
這樣一來系統便知道您進行安裝步驟以執行您的應用程式。如果專案還有其他必須完成的安裝步驟,而且原先已定義了專案安裝程式,您必須使用 System.Management.Instrumentation 中提供的 ManagementInstaller 類別,例如,您要新增下列程式碼到專案安裝程式建構函式 (Constructor) 中:
ManagementInstaller managementInstaller = new ManagementInstaller();
Installers.Add(managementInstaller);
您可以使用數種方法來叫用這個安裝步驟:
如果您將您的應用程式封裝 (Package) 為 MSI 安裝套件,請確定開啟執行 .NET 安裝程式的選項,然後 MSI Install 將為您執行安裝程式。
執行副稽核組件的 .NET Framework SDK 上的 installutil.exe 公用程式。
c:> installutil <yourassemblyname>
您可以從您的應用程式執行安裝程式,方法是將下列程式碼新增到 Main() 函式的起始處:
string[] installArgs = new String[] { "/logfile=", "/LogToConsole=false", "/ShowCallStack", typeof(App).Assembly.Location, }; System.Configuration.Install.ManagedInstallerClass.InstallHelper(installArgs);
注意 不管這個選項為何,第一次執行應用程式後 (而非在安裝應用程式後),消費者將可以使用這個應用程式的管理結構描述。
如果叫用的使用者是本機系統管理員群組的成員,不論您叫用結構描述註冊的方法為何,註冊都會成功。這個情形通常是發生在安裝應用程式後,但請注意如果您的應用程式不需要安裝步驟,您的應用程式至少要在管理結構描述取得註冊和應用程式可提供管理資料和事件之前,由本機系統管理員執行過一次。
為方便開發人員在設計階段時的使用,第一次應用程式引發事件或發行執行個體時,結構描述將自動發行。這樣可避免在快速原型應用程式期間,必須宣告專案安裝程式和執行 InstallUtil。同樣的,如果執行應用程式的人員為本機系統管理員群組成員,才會發生結構描述自動發行的情況。請注意,如果應用程式已備妥並可進行部署,則請勿信賴此行為。副稽核組件的結構描述只能使用先前描述的其中一個安裝程式機制,在安裝階段發行到 WMI。
事件 (或執行個體) 類別結構描述駐留在組件中,並且在安裝期間註冊在 WMI 儲存機制中。
.NET 組件可擁有版本資訊。組件版本之間並沒有直接對應,而 WMI 結構描述則是註冊在 WMI 儲存機制中。
建議的方法是避免版本不相容:
- 如果結構描述改變,請執行 InstallUtil.exe 來重新安裝組件。
- 重新安裝衍生自變更類別 (如果有的話) 的所有類別組件。
- 重新編譯用戶端應用程式。
但有時候用戶端應用程式無法重新編譯。下列兩個案例可說明這種情況:這兩個案例都適用於事件結構描述:
**案例 1:**事件類別結構描述並未變更。
**動作:**當您重新編譯和重新安裝時,請確認含有類別定義的組件主要和次要版本擁有原始值。
**案例 2:**事件結構描述已變更。更進一步說明,事件類別結構描述已變更,方法是新增屬性和/或方法;先前定義的屬性或方法都沒有移除。
**動作:**在這個情況下,強烈建議將應用程式的副稽核移到不同的 WMI 命名空間。
如果目前註冊的結構描述因故毀損,可能會出現重新執行 installutil.exe 時不必重新註冊原始結構描述的情形。此時,您可以使用 /f 或 /force 參數,強制安裝程式重新安裝結構描述:
installutil.exe /f <yourassemblyname>
移除註冊結構描述
安裝程式通常支援下列用法的解除安裝參數:
installutil.exe /u <yourassemblyname>
其中 <yourassemblyname> 是包含較早註冊的結構描述定義的組件。
但是這個版本的 ManagementInstaller 類別在解除安裝時不執行任何作業,尤其是不移除註冊結構描述。這是因為可能有多個 WMI 提供者使用相同結構描述,但沒有機制能識別有無其他實體使用特殊結構描述和能否安全的移除。
請參閱
使用 System.Management 副稽核 .NET Framework 應用程式 | CLI 和 WMI 中的類別和對應 | 公開管理事件 | 公開管理資料 | 繼承