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-dll_Com_Wix_Wix3.5_Wix3_Heat - Fatal编程技术网

在wix中注册com-dll

在wix中注册com-dll,com,wix,wix3.5,wix3,heat,Com,Wix,Wix3.5,Wix3,Heat,如果不是自动注册。那么,在使用WIX进行安装时,如何执行COM dll注册 根据,我使用了ComPlusApplication示例(非.NETDLL)。但它不起作用。它没有注册 我可以从命令行使用regsvr32成功注册。 我读过关于不创建用于注册com DLL的自定义操作的内容 那么,最好的方法是什么? 如果我们需要使用heat,我们应该在哪里编写命令并将结果wxs添加到主项目中 我强烈建议使用Wix工具Heat.exe获取注册com组件所需的所有数据,然后在.wxs文件中引用片段,如下所示:

如果不是自动注册。那么,在使用WIX进行安装时,如何执行COM dll注册

根据,我使用了ComPlusApplication示例(非.NETDLL)。但它不起作用。它没有注册

我可以从命令行使用regsvr32成功注册。 我读过关于不创建用于注册com DLL的自定义操作的内容

那么,最好的方法是什么?
如果我们需要使用heat,我们应该在哪里编写命令并将结果wxs添加到主项目中

我强烈建议使用Wix工具Heat.exe获取注册com组件所需的所有数据,然后在.wxs文件中引用片段,如下所示:

    <ComponentGroupRef Id="FooBar.dll" />
    <?include FooBar.dll.wxi?>

或者将其包含在.wxs文件中,如下所示:

    <ComponentGroupRef Id="FooBar.dll" />
    <?include FooBar.dll.wxi?>

此方法使您能够完全控制Com组件注册/注销期间发生的情况

但是,您仍然可以在Wix项目中使用Regsvr32。但它依赖于COM组件中RegisterServer/UnregisterServer功能的正确实现

    <CustomAction Id="RegisterFooBar" 
                  Directory="INSTALLDIR" 
                  ExeCommand='regsvr32.exe /s "[INSTALLDIR]FooBar.dll"'> 
    </CustomAction> 
    <CustomAction Id="UnregisterFooBar" 
                  Directory="INSTALLDIR" 
                  ExeCommand='regsvr32.exe /s /u "[INSTALLDIR]FooBar.dll"'> 
    </CustomAction>

然后将操作添加到安装序列中

    <InstallExecuteSequence> 
        <Custom Action="RegisterFooBar" After="InstallFinalize">NOT Installed</Custom>
        <Custom Action="UnregisterFooBar" After="InstallFinalize">REMOVE="ALL"</Custom>
    </InstallExecuteSequence>

未安装
REMOVE=“全部”

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

heat.exe文件-gg-out

例如:

heat.exe文件my.dll-gg-out my.wxs


Ps.添加-gg开关将生成GUID,否则如果您想手动添加它们,可以跳过它。

我使用heat工具生成并将输出复制到我的.wxs文件。@rakheep:如果您发现一个有用的答案,请向上投票。当您收到一个或多个正确答案时,请选择最佳答案。上面的帖子中似乎缺少“取消注册”命令。当我无法使用heat为1个特定dll提取注册表信息时,我也不得不使用此方法。在一个特定的项目中为除1之外的所有人工作。@ColeW我添加了“注销”命令,谢谢!下面是我在处理自注册DLL时学到的另一个技巧。如果您设法找到安装所述dll的msi或msm(例如,从第三方分发服务器,您可以使用Dark.exe Wix工具提取描述msm的.wxs文件。然后,您可以在那里查找所需dll的描述。使用自定义操作起初看起来很优雅。但它依赖于COM组件中RegisterServer/UnregisterServer函数的正确实现更安全的方法是用<代码>热GG<代码>创建注册表信息。我建议强调你的答案中看起来像是一个旁注。尽管你要求登记的方式,你可以考虑不登记COM组件。免注册的COM模型允许你使用COM DLL而不需要触摸注册表。