2009-12-28 62 views
5

我已经在c#中编写了一个管理单元。MMC自定义管理单元安装

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

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

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

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

回答

8

您的问题可能会有所不同,但我曾在一台64位机器上遇到类似问题,并发现以下情况。如果你的问题与32/64位无关,我不能说这个问题是什么,我很抱歉花时间。

您应该可以使用InstallUtil安装管理单元。但是请注意,InstallUtil上有两个独立的版本:一个(默认)用于x86二进制文件,另一个用于x64二进制文件。

即使您编译您的C#代码为任何CPU,使用标准InstallUtil只会将MMC管理单元注册为32位管理单元。如果您在64位操作系统上运行,请尝试将MMC作为32位进程启动(MMC /32 IIRC),然后查看您的管理单元在此处是否无法使用。

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

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

+0

谢谢,即使它没有直接解决我的问题,这是很好的知道。我使用安装项目输出的自定义操作创建MSI。如果它是一台64位机器,我是否正确地假设它将在安装过程中运行安装64位版本? – pdiddy 2009-12-28 20:48:42

+0

我真的不知道,但AFAIR MSI文件是32位或64位,所以除非明确指出是64位MSI,否则我认为它将使用32位版本。但是,您可以通过以32位模式打开MMC以查看您的管理单元是否可用,从而可以非常轻松地进行测试。实际上,所有这些都归结为在注册表中的哪个节点上注册了管理单元。 – 2009-12-28 21:23:17

3

添加到马克·西曼的回应:

您也可以直接检查MMC注册表项,以验证您的管理单元是否是注册在64位注册表项或32位重定向注册表(就是那个节目下设Wow6432Node):

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

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

如果您确实需要64位管理单元注册(以及为什么?),MSDN在MMC 64-Bit Versus 32-Bit Considerations上有一个页面,其中包含一些更多详细信息,包括要调用哪些InstallUtil路径以获取64位和32位注册表项。

但请注意,某些MSI打包应用程序实际上包含MSI本身中的InstallUtil.exe副本作为二进制文件,而不是调用目标机器上的一个。(您可以通过查看MSI二进制表和使用Orca的自定义操作来检查是否发生这种情况。)如果只包含32位InstallUtil,它会将您的注册放在错误的位置(Wow6432Node),对您来说运气不佳。根据我的理解,Windows安装程序“正确的方式”(TM)是根本不使用InstallUtil(我认为主要是由于涉及运行托管的MSI自定义操作的问题?)。在任何情况下,如果您避免使用InstallUtil,您将通过在MSI中明确创建注册表项来完全注册您的管理单元,从而使Windows Installer能够控制创建和删除它们。

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

相关问题