mofcomp
托管对象格式 (MOF) 编译器分析包含 MOF 语句的文件,并将该文件中定义的类和类实例添加到 WMI 存储库。 在安装提供 MOF 文件的系统期间,通常会自动编译这些文件,但你也可以使用此工具编译 MOF 文件。
有关查找和使用 mofcomp.exe 的详细信息,请参阅使用 WMI 管理工具。 有关从 WMI 存储库中删除类和实例的信息,请参阅 pragma deleteclass 预处理器命令。
以下代码示例演示如何针对文件运行 MOF 编译器。
mofcomp
[-autorecover]
[-check]
[-N:<namespacepath>]
[-class:createonly | -class:forceupdate |
-class:safeupdate | -class:updateonly ]
[-instance:updateonly | -instance:createonly]
[-B:<filename>]
[-WMI]
[-P:<Password>]
[-U:<UserName>]
[-A:<Authority>]
[-MOF:<path>]
[-MFL:<path>]
[-AMENDMENT:<Locale>]
[-ER:<ResourceName>]
[-L:<ResourceLocale>]
<MOFfile>
-
-autorecover
-
将命名 MOF 文件添加到在存储库恢复过程中编译的文件列表中。 autorecover MOF 文件的列表存储在此注册表项中:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\CIMOM\
此注册表项中列出的 MOF 文件必须位于本地计算机上,因为使用 autorecover 命令的 MOF 文件无法恢复位于远程计算机上的 MOF 文件。
备注
若要确保在 WMI 发生故障并重启时将托管对象的所有 WMI 类定义还原到 WMI 存储库,请使用托管对象格式 (MOF) 文件中的 #pragma autorecover 预处理器指令。
-
-check
-
请求编译器仅执行语法检查并打印相应的错误消息。 其他开关都不能与此开关一起使用。 使用此开关时,不会与 Windows Management Instrumentation (WMI) 建立连接,且不会对 WMI 存储库进行修改。
-
-N:<namespacepath>
- 请求编译器将 MOF 文件加载到指定为 *namespacepath* 的命名空间中。 除非使用此开关,否则已编译的 MOF 将加载到默认的 Mofcomp 命名空间 root\\default 中。 也可以在 MOF 文件中插入预处理器命令 **\#pragma namespace ("***namespace path***")** 以实现相同的效果。 如果同时使用 **-N:** 开关和 \#pragma namespace 命令,则 \#**pragma namespace** **autorecover** 优先。 在这种情况下,只能通过编辑 MOF 文件并更改 \#**pragma namespace** 命令将 MOF 编译到另一个命名空间中。 可以使用 \\\\machinename\\root\\default 指定远程计算机。
-
-class:createonly
-
请求编译器不要对现有类进行任何更改。 使用此开关时,如果 MOF 文件中指定的类已存在,则编译器操作将会终止。
-
-class:forceupdate
-
存在有冲突的子类时强制更新类。 例如,假设在子类中定义了一个类限定符,而基类尝试添加相同的限定符。 在 -class:forceupdate 模式下,MOF 编译器通过删除子类中有冲突的限定符来解决此冲突。 如果子类有实例,则强制更新会失败。
-
-class:safeupdate
-
允许更新类,即使存在子类也是如此,只要更改不会导致与子类发生冲突即可。 例如,此标志允许将新的属性添加到基类中,此基类先前未在子类中提及。 如果子类有实例,则更新会失败。
-
-class:updateonly
-
请求编译器不要创建任何新类。 使用此开关时,如果 MOF 文件中指定的类不存在,则编译操作将会终止。
-
-instance:updateonly
-
请求编译器不要创建任何新实例。 使用此开关时,如果 MOF 文件中指定的实例不存在,则编译操作将会终止。
-
-instance:createonly
-
请求编译器不要对现有实例进行任何更改。 使用此开关时,如果 MOF 文件中指定的实例已存在,则编译操作将会终止。
-
-B:<filename>
-
请求编译器使用名称 filename 创建 MOF 文件的二进制版本,而不对 WMI 存储库进行任何修改。
如果使用 -B:<filename> 选项创建二进制 MOF 文件,则只会在 WMI 存储库中存储默认的限定符风格。
二进制 MOF 格式是将 WDM 驱动程序与 MOF 组合为资源的中间格式。 与文本 MOF 文件一样,二进制 MOF 表示类和实例,在存储到磁盘之前会经过压缩。
-
-WMI
-
请求编译器执行 WMI 语法检查。 -B: 开关必须与此开关一起使用。 -WMI 开关仅用于生成供 WDM 设备驱动程序使用的二进制 MOF 文件。 此开关调用一个单独的二进制 MOF 文件检查程序,该检查程序在创建二进制 MOF 文件之后运行。
-
-P:<Password>
-
将 Password 指定为计算机用户在登录时输入的密码。
-
-U:<UserName>
-
将 UserName 指定为登录用户的名称。
-
-A:<Authority>
-
将 Authority 指定为登录 WMI 时要使用的颁发机构(域名)。
-
-MOF:<path>
-
中性语言输出的名称。 与 -AMENDMENT 开关一起使用,以指定要生成的语言中性 MOF 文件的名称。
-
-MFL:<path>
-
特定语言输出的名称。 与 -AMENDMENT 开关一起使用,以指定要生成的语言特定 MOF 文件的名称。
-
-AMENDMENT:<Locale>
-
将 MOF 文件拆分成中性语言和特定语言版本。 MOF 编译器创建语言中性的 MOF 文件,其中删除了所有已修正的限定符。 还会使用 MFL 文件扩展名创建 MOF 文件的本地化版本。 Locale 参数指定包含本地化类定义的子命名空间的名称。 Locale 参数的格式为 MS_xxx,其中 xxx 是 Windows LCID 的十六进制值。 例如,美国英语的区域设置为 MS_409。
-
-ER <ResourceName>
-
从命名资源中提取二进制 MOF。 此开关从 WMI 存储库中的类获取二进制 MOF,而 -B 开关则是从 MOF 文件创建二进制 MOF 格式。
-
-L:<ResourceLocale>
-
可选。 与 -ER 开关一起使用时,从二进制 MOF 中提取本地化的 MOF 描述。
-
< MOFfile>
-
要分析的文件的名称。
作为第一个操作,MOF 编译器对 MOF 文件执行语法检查。 如果编译器发现任何错误,则它会输出错误消息,进程将会终止。
MOF 编译器可返回以下值:
-
0
-
MOF 编译操作成功。
-
1
-
MOF 编译器无法连接到 WMI 服务器。 此问题是由于语义错误(例如与现有 WMI 存储库不兼容)或实际错误(例如 WMI 服务器无法启动)导致的。
-
2
-
一个或多个命令行开关无效。
-
3
-
发生 MOF 语法错误。
如果正确分析了 MOF 文件,但尝试执行命令行开关禁止的操作,则编译器将返回 WMI 生成的错误代码,而不是前面列表中列出的任何返回代码。 例如,当指定 -instance:updateonly 开关并且 MOF 文件尝试创建实例时,将返回 WMI 错误代码。
如果 #pragma autorecover 预处理器语句未包含在文件中,则会返回以下警告:
WARNING: FileYourMof.Mof does not contain #PRAGMA AUTORECOVER.
If the WMI repository is rebuilt in the future, the contents of this
MOF file will not be included in the new WMI repository.
To include this MOF file when the WMI Repository is automatically
reconstructed, place the #PRAGMA AUTORECOVER statement on the first
line of the MOF file.
MOF 编译器位于 %Windir%\System32\wbem 目录中。 必须将 MOF 文件指定为 MOF 编译器的参数。 如果你希望在必须自动恢复 CIM 存储库的情况下自动重新编译 MOF 文件,则还可以指定一个 Autorecover 开关。 如需详细信息,请在命令提示符下键入 Mofcomp /?。
使用 Unicode 字符集的 MOF 文件包含签名作为文件的前两个字节。 此签名是 U+FFFE 或 U+FEFF,具体取决于文件的字节顺序。
如果分析过程中未发生错误,则除非指定了 -check 开关,否则 MOF 编译器将连接到在本地计算机上运行的 WMI 服务器。 MOF 文件中定义的类和实例将添加到 WMI 存储库。
如果在更新 WMI 存储库时发生错误,编译器不会尝试将存储库恢复为其在编译器开始处理之前的状态。
Windows 8:安装提供程序时,mofcomp 会将 [Key] 和 [Static] 限定符视为 true(如果这些限定符存在),而不管它们的实际值如何。 将其他限定符视为 false(如果这些限定符存在,但未显式设置为 true)。
要求 | 值 |
---|---|
最低受支持的客户端 |
Windows Vista |
最低受支持的服务器 |
Windows Server 2008 |