6

我在 C# 中编写了一个管理单元。

我尝试使用 installutil 安装它,但一开始没有用。我注意到在 msdn 页面上,他们说要运行 mmcperf 以将 management.dll 安装到 GAC 中。

这样做,我能够安装我的管理单元并运行它。我有一台xp机器。

我的问题是如何在客户机器上部署我的自定义管理单元......我需要考虑哪些事情?(操作系统?,.net 框架,是否安装了 mmc 3.0 等?)

我可以在安装我的管理单元期间运行 mmcperf 吗?这是一个好方法吗?

4

2 回答 2

9

您的问题可能有所不同,但我曾经在 64 位机器上遇到过类似的问题,并发现了以下问题。如果您的问题与 32/64 位无关,我无法说出问题所在,并且很抱歉占用您的时间。

您应该能够使用 InstallUtil 安装管理单元。但是,请注意 InstallUtil 有两个不同的版本:一个(默认)用于 x86 二进制文件,一个用于 x64 二进制文件。

即使您为Any CPU编译 C# 代码,使用标准 InstallUtil 也只会将 MMC 管理单元注册为 32 位管理单元。如果您在 64 位操作系统上运行,请尝试将 MMC 作为 32 位进程 ( MMC /32IIRC) 启动,并查看您的管理单元是否在那里不可用。

要将管理单元注册为 64 位管理单元,您必须使用 64 位版本的 InstallUtil(通常位于 C:\Windows\Microsoft.NET\Framework64\v2.0.50727)。

要注册这两个版本的管理单元,您必须注册两次。

于 2009-12-28T19:44:31.033 回答
3

添加到 Mark Seemann 的回复中:

您还可以直接检查 MMC 注册表项,以验证您的管理单元是否已在 64 位注册表项或 32 位重定向注册表(显示在Wow6432Node下的注册表项)中注册:

  • 64 位管理单元:HKLM\Software\Microsoft\MMC\SnapIns\FX:{SNAP-IN-GUID}...
  • 32 位管理单元:HKLM\Software\Wow6432Node\Microsoft\MMC\SnapIns\FX:{SNAP-IN-GUID}...

如果您的条目仅在 HKLM\Software\Wow6432Node 下,那么您已经注册了 32 位管理单元,并且 Mark 关于运行“MMC /32”的建议应该使它们可见。这不是世界末日:如果您将 MMC 会话保存为管理单元快捷方式,我认为它在运行时会打开 32 位版本的 MMC。

如果您真的想要 64 位管理单元注册(为什么不呢?),MSDN 有一个关于 MMC 64 位与 32 位注意事项的页面,其中包含更多详细信息,包括调用哪些 InstallUtil 路径以获得 64 位和 32 位注册表项。

但请注意,某些 MSI 打包应用程序实际上在 MSI 本身中包含了 InstallUtil.exe 的副本作为二进制文件,而不是在目标计算机上调用该副本。(您可以通过查看 MSI 二进制表和使用Orca的自定义操作来检查是否发生这种情况。)如果仅包含 32 位 InstallUtil,它会将您的注册放在错误的位置 (Wow6432Node),这对您来说很不幸。

据我了解,Windows 安装程序“正确的方式”(TM)根本不使用 InstallUtil (我认为主要是由于运行托管 MSI 自定义操作所涉及的问题?)。在任何情况下,如果您避免使用 InstallUtil,您将通过在 MSI 中显式创建注册表项来完全注册您的管理单元,让 Windows Installer 控制创建和删除它们。

或者,您可以执行自定义操作来调用目标计算机的 Framework64 文件夹下的 InstallUtil.exe。这将获得正确的管理单元注册位置,但是您必须处理这样一个事实,即自定义操作会在运行时弹出一个 CMD shell 窗口,如果这让您感到困扰的话。不确定您的 MSI 创作工具是否具有同等功能,但在 WiX 中有Quiet Execution Custom Action。(我想如果你不使用 WiX,你仍然可以包含 WixUtilExtension.dll 并在适当设置 QtExec64CmdLine 属性后调用“CAQuietExec64”......但如果你在那个级别的 MSI 创作中工作,你可能会更好只是为了切换和使用 WiX :)

于 2010-01-05T01:22:55.923 回答