使用Wix注册COM服务器

4
我有以下WiX代码,用于注册COM服务器组件。
<Component Id="ServerComponent" Guid="<someguid>">
    <File Id="comserverid" Name="comserver.exe" Source="path_to_com_server" DiskId="1" Checksum="yes" >
        <TypeLib Id="{<TYPELIBGUID>}" Description="ComServer 1.0 Type Library"  HelpDirectory="INSTALLLOCATION"  Language="0" MajorVersion="1" MinorVersion="0">
            <AppId Description="ComServer" Id="{<APPIDGUID>}}">
                <Class Id="{<SOMECLASSGUID>}" Context="LocalServer32" Description="ComServerClass Class" ThreadingModel="apartment" Advertise="no">
                    <ProgId Id="ComServer.ComServerClass.1" Description="ComServerClass Class">
                        <ProgId Id="ComServer.ComServerClass" Description="ComServerClass Class" />
                    </ProgId>
                </Class>
            </AppId>                                
        </TypeLib>
    </File>
    <RegistryValue Root="HKCR" Key="AppID\comserver.exe" Name="AppID" Value="{<APPIDGUID>}" Type="string" Action="write" />
</Component>

它成功地注册了服务器,但是当我以“run as”模式运行程序时,程序没有看到COM服务器。请给予建议 - 我应该如何更改WIX代码。
更新:答案是 - 以提升的权限运行WiX脚本或以提升的权限运行comserver.exe /regserver,但这并没有起作用。我认为上面的脚本很有用,所以我保留问题,并创建一个略微不同的问题。

1
如果您手动注册COM服务器comserver.exe /regserver,会发生什么?您能从程序中使用COM对象吗?我怀疑问题不在WIX中,而是在您的COM服务器中。 - Jacob Seleznev
你可能想要提高你的采纳率以获得更多的答案。 - Christopher Painter
comserver.exe /regserver 在具有管理员权限的用户下成功执行,HKLM值正确,但我无法获取COM对象的接口。 - se_pavel
1个回答

2
检查您的ALLUSERS属性的值。如果您想进行全局安装,应将其定义为1或2。如果以每个用户的身份进行安装,则会将注册表更新写入HKCU而不是HKLM。(根据安装的范围,HKCR可以指向HKCU \ Software \ Classes或HKLM \ Software \ Classes)。

我想避免这种情况,因为我的程序计划只安装在每个用户上,而不是每台机器上。 - se_pavel
我看到你接受了答案,但我不明白你的目标。如果你想要进行每个用户的安装,为什么会期望COM服务器存在于另一个用户配置文件中呢? - Christopher Painter
很可能是由问题的“run us”方面引起的:COM服务器的注册是为普通用户完成的,但客户端程序是以具有管理员权限的用户身份运行的。 - Wolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接