注册与维克斯COM服务器(Registering a COM server with WiX)

2019-09-01 03:06发布

我一直在试图确定注册使用WiX的创建一个Windows安装程序包COM服务器,并很努力最好的情况的解决方案。

在这篇文章中部署工程档案:HOWTO:使用Regsvr32.exe与维克斯 ,有一个“设置警察”,以打击通过一个exe自定义操作使用REGSVR32开放的要求。 我知道使用的罪恶regsvr32为它注册到系统而不是用户,但我还记得, OleSelfRegister可以从Microsoft支持公告的问题(对不起,找不到链接) -我相信他们建议使用regsvr32

有什么建议?

Answer 1:

阅读“不要使用SelfReg和类型库表”上:

https://msdn.microsoft.com/en-us/library/bb204770#no_selfreg

对于WiX的,看看在架构参考组件元素:

http://wixtoolset.org/documentation/manual/v3/xsd/wix/component.html

采取一定的子元素如的AppId, ,PROGID, 注册表等的通知。 正确的方法是使用COM extraction反映的注册信息和声明发出到您的安装程序,从而MSI可以照顾它,你不走出去过程中的一些代码(如DllRegisterServer()可能会失败,也没有提供MSI洞察组件从修复和广告的角度足迹。



Answer 2:

有一个工具“牛油”包含维克斯。 你可以用它来自动生成正确的注册表项。 然后你只需配置维克斯安装写这些条目。 Selfreg不宜使用。



Answer 3:

作为@Trampster指出,heat.exe不会从COM服务器做收获注册表项的一个好工作。 我试过,但结果是不完整的。

取而代之的是,在之后的建议监视注册表存取(InstallSite工具:监测) ,我用的InstallShield RegSpyUI。 这理应船舶使用InstallShield V7和超越版本,包括评估版本。 这些信息可能是过时的; 我可以证实,它使用随VS2013漂亮,很多无用的Installshield LE提供。

幸运的是,我也有2010的InstallShield的副本,这并配备RegSpyUI。

无论如何,RegSpyUI是一件轻而易举的使用方法:在COM的.exe点它,提取登记信息到.reg文件。 然后使用热收获到.wxs文件,这个你可以添加到您的维克斯项目

heat reg <some.reg> -gg -o <some.wxs>

然后,它只是一个修改指向COM .exe文件的位置,以便它们反映了预期的安装文件夹的任何硬编码路径的问题。

例如,如果通过RegSpyUI创建.wxs文件+热有这样的事情

<Fragment>
    <DirectoryRef Id="TARGETDIR">
        <Component Id="blah" Guid="{xxxxxxxxxxxxxxxxxxxxxxxxx}" KeyPath="yes">
            <RegistryKey Key="TypeLib\{xxxxxxxxxxxxxxxxxxxxxx}\4.1\0\win32" Root="HKCR">
                <RegistryValue Value="C:\Users\you\projects\MyProject\dependencies\installation\COMFOO.exe" Type="string" />
            </RegistryKey>
        </Component>
    </DirectoryRef>
</Fragment>

和你在你的主威克斯文件安装到

<Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder" Name="PFiles">
            <Directory Id="COMPANY" Name="My Company">
                <!--This is the actual installation folder-->
                <Directory Name="MyProduct" Id="MYPRODUCT">

然后只需编辑RegistryValue @值路径......“ [MYPRODUCT]\COMFOO.exe



Answer 4:

There is just one drawback to this: WiX Com registration with heat.exe does not work for .exe COM servers. InstallShield and its tools seem to support it, but RegSpyUI is just a UI tool, not one which I can run on my build machine.



Answer 5:

试试这个:

  1. 创建一个新的.NET项目
  2. 添加项目引用到候选COM DLL或EXE OOP要收集其WXS
  3. 搜索文件Interop.candidate.dll (在obj\debug文件夹中)
  4. 运行在你刚发现的互操作的dll的WiX的加热工具。


文章来源: Registering a COM server with WiX