Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向WiX注册COM服务器_Wix_Windows Installer_Installation - Fatal编程技术网

向WiX注册COM服务器

向WiX注册COM服务器,wix,windows-installer,installation,Wix,Windows Installer,Installation,我一直在努力确定一个最好的解决方案,用WiX注册一个COM服务器来创建一个Windows安装程序包,我正在努力 在这篇文章中,有一个公开请求“设置警察”通过exe自定义操作来打击使用regsvr32的行为。我知道使用regsvr32的坏处,因为它注册到系统而不是用户,但我还记得OleSelfRegister可能会在microsoft支持公告中出现问题(抱歉,找不到链接)-我相信他们建议使用regsvr32 有什么建议吗?请阅读“不要使用SelfReg和TypeLib表”,网址为: 对于WiX,

我一直在努力确定一个最好的解决方案,用WiX注册一个COM服务器来创建一个Windows安装程序包,我正在努力

在这篇文章中,有一个公开请求“设置警察”通过exe自定义操作来打击使用regsvr32的行为。我知道使用
regsvr32
的坏处,因为它注册到系统而不是用户,但我还记得
OleSelfRegister
可能会在microsoft支持公告中出现问题(抱歉,找不到链接)-我相信他们建议使用
regsvr32

有什么建议吗?

请阅读“不要使用SelfReg和TypeLib表”,网址为:

对于WiX,请查看模式参考中的Component元素:


注意某些子元素,如AppId、Class、ProgId、Registry等。正确的方法是使用
COM提取
来反映注册信息,并以声明方式将其发送到安装程序中,这样MSI就可以为您处理注册信息,而无需对某些代码进行处理(如
DllRegisterServer()
)这可能会失败,也不能从维修和广告的角度让MSI深入了解组件的封装外形。

Wix附带了一个工具“动物脂”。您可以使用它自动生成正确的注册表项。然后您只需配置wix安装来写入这些条目。Selfreg不应使用。

正如@Trampster所指出的,heat.exe无法很好地从COM服务器获取注册表项。我试过了,但结果不完全

相反,根据上的建议,我使用了InstallShield RegSpyUI。这可能与Installshield v7及更高版本一起提供,包括评估版本。此信息可能已过期;我可以确认它不是VS2013附带的几乎毫无用处的Installshield LE

幸运的是,我确实有一份InstallShield 2010的副本,这是随RegSpyUI提供的

无论如何,使用RegSpyUI很容易:将它指向COM.exe,将注册表信息提取到.reg文件中。然后使用heat将其收集到一个.wxs文件中,您可以将其添加到Wix项目中

heat reg-gg-o

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

e、 g.如果由RegSpyUI+heat创建的.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>

您正在主wix文件中安装到

<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@value路径…
[MYPRODUCT]\COMFOO.exe

这只有一个缺点:WiX Com向heat.exe注册不适用于.exe Com服务器。InstallShield及其工具似乎支持它,但RegSpyUI只是一个UI工具,不是我可以在构建机器上运行的工具。

尝试以下方法:

  • 创建一个新的.NET项目
  • 向要收集其WX的候选COM dll或OOP exe添加项目引用
  • 搜索文件
    Interop.candidate.dll
    (在
    obj\debug
    文件夹中)
  • 在刚刚找到的互操作dll上运行WiX Heat工具

  • 参考:牛脂不再是wix的一部分。从wix3开始,它已被heat.exe替换。heat不会为ActiveX exe服务器生成任何注册表值,因此此答案是正确的wrong@trampster那么你认为这是一个好的选择吗?