tabctl32.msm WiX 安装时没有注册 ocx

tabctl32.msm installed by WiX does not register the ocx

我正在将旧的 VB6 应用程序从 InstallShield 移动到由 Visual Studio WiX 项目驱动的 WiX 安装程序。一切都很好,只是我需要 tabctl32.msm 的 Microsoft 选项卡控件。当我将其包含在我的 WiX 项目中时,OCX 会安装但无法工作,直到我在其上 运行 regsvr32。

使用 InstallShield 或 Visual Studio 安装程序,msm 正确注册了它的组件。我假设那是 msm 的工作。

我正在以管理员身份安装每台机器和 msi 运行s。下面是一些说明问题的简化 WiX 代码:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="*" Name="TabCtlTest" Language="1033" Version="1.0.0.0" Manufacturer="A Company" UpgradeCode="bd70911b-976f-462d-b381-26bc4dc0758e">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate EmbedCab="yes" />

        <Feature Id="ProductFeature" Title="TabCtlTest" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
            <MergeRef Id="TABCTL32"/>
            <MergeRef Id="COMCAT"/>
            <MergeRef Id="OLEAUT32"/>
        </Feature>
    </Product>

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Merge Id="TABCTL32" SourceFile="$(env.ProgramFiles)\Common Files\Merge Modules\TABCTL32.MSM" Language="1033" DiskId="1" />
            <Merge Id="COMCAT" SourceFile="$(env.ProgramFiles)\Common Files\Merge Modules\COMCAT.MSM" Language="1033" DiskId="1" />
            <Merge Id="OLEAUT32" SourceFile="$(env.ProgramFiles)\Common Files\Merge Modules\OLEAUT32.MSM" Language="1033" DiskId="1" />
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLFOLDER" Name="TabCtlTest" />
            </Directory>
        </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
            <Component Id="cmp59A149A53D5CFB2D09E03E213D57D2E4" Guid="{BA66D5C5-0813-4822-9F40-8E5C9B242E8B}">
                <File Id="fil36DDAE6925146DA614B90C0E87BD68AC" KeyPath="yes" Source="..\vbprog\Project1.exe" />
            </Component>
        </ComponentGroup>
    </Fragment>
</Wix>

我正在使用 Visual Studio 2015 和 WiX 3.9。

在使用 Orca 仔细研究了不同的 msi 之后,我发现了一些缺失的项目。当我添加

<InstallExecuteSequence>
    <RegisterClassInfo Sequence="4200" />
    <RegisterProgIdInfo Sequence="4300" />
    <WriteRegistryValues Sequence="4400" />
</InstallExecuteSequence>

到产品节点,它导致 COM 注册发生。似乎 InstallShield 和 Visual Studio Installer 会自动执行此操作,但是,就像很多事情一样,要使用 WiX 执行此操作,您必须深入研究并自己弄清楚。不,我不知道这些序列号应该是什么。在比较了 Orca 显示器后,我把它们从我的帽子里拿出来了。