如何在WiX 3中注册Win32 COM DLL文件?

Dav*_*vy8 35 com dll wix wix3

我找到了一个关于注册DLL的示例,使用Windows Installer XML工具集在MSI文件中注册COM Interop的程序集.,和WiX抱怨"AssemblyRegisterComInterop"属性.

我删除了它并将"Assembly"属性更改为win32,它说我需要指定AssemblyManifest属性,但是我应该放在那里?

Tro*_*ard 41

最简单的方法(而且Rob M会咆哮并狂热地说这是错误的)只是SelfRegCost=1在DLL的File标签上使用 .

这是错误的,因为我们应该明确控制DLL的注册,不允许它只是通过DllRegisterServer运行任意代码.理论上,当调用DllRegisterServer时,DLL不应该在注册表中放入适当的条目.不幸的是,他们中的很多人做的不止这些,所以自我注册可能是让你的安装工作的唯一方法.

这也是错误的,因为这意味着Windows安装系统对这些注册表项一无所知,应该和不应该有什么.这意味着修复将无法正常工作,并且可能无法正常卸载,等等.

否则,您可以通过指向heat.exeDLL并将其输出集成到当前的WiX项目中来生成相应的WiX代码.您将获得各种Class,ProgID,TypeLib和Registry标记.您可能需要手动编辑该输出以使其进行编译.

我希望有所帮助.

  • 我通常像这样运行热量:热文件-gg -sfrag"C:\ path\to\file.dll"-o myfile.wxs ...然后在生成的项目中包含生成的wxs文件,修改它,并引用来自msi/merge模块的"main"wxs的根组件,通过componentref或componentgroupref. (4认同)

Rob*_*ing 24

关于SelfReg是如何邪恶的,不仅仅是我会咆哮和狂欢.MSI SDK为您提供了不使用SelfReg 的七个原因列表.

例:

<Component Id="Component" Guid="*">
    <File Source="ComServer.dll">
        <Class Id="PUT-CLSID-HERE" Context="InprocServer32" ThreadingModel="apartment" Description="Your server description">
            <ProgId Id="Your.Server.1" Description="Your ProgId description">
                <ProgId Id="Your.Server" Description="Your ProgId description" />
            </ProgId>
        </Class>

        <Class Id="PUT-PROXY-CLSID-HERE" Context="InprocServer32" ThreadingModel="both" Description="Your server Proxies, assuming you have them">
            <Interface Id="PUT-INTERFACEID-HERE" Name="IInterface1" />
            <Interface Id="PUT-INTERFACEID-HERE" Name="IInterface2" />
            <Interface Id="PUT-INTERFACEID-HERE" Name="IInterface3" />
            <Interface Id="PUT-INTERFACEID-HERE" Name="IInterface4" />
        </Class>
    </File>
</Component>
Run Code Online (Sandbox Code Playgroud)

最终,特洛伊的答案都是正确的.


Ada*_*gen 13

您可以尝试使用heat.exe程序,然后在您的wix代码中引用该片段.

 heat.exe file <filename> -out <output wxs file>
Run Code Online (Sandbox Code Playgroud)

如:

 heat.exe file my.dll -out my.wxs
Run Code Online (Sandbox Code Playgroud)

  • 添加如何使用片段 (2认同)