Registrar un dll de CPP en COM después de la instalación utilizando el instalador Wix Msi

Estoy tratando de registrar una biblioteca CPP en COM durante la instalación de Msi.

He buscado mucho y he encontrado muchas soluciones aquí, pero nada funciona en mi código. No sé si hay algún método directo para esto. He intentado usar Acción personalizada con ExeCommand directo y con un script por lotes.

Aquí está el código con script por lotes.

<SetProperty Id="Register" Value="&quot;[INSTALLDIR]Scripts\Register.bat&quot;" After="CostFinalize"/>
<CustomAction Id="Register" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no"/> 

<SetProperty Id="Unregister" Value="&quot;[INSTALLDIR]Scripts\UnRegister.bat&quot;" After="CostFinalize"/>
<CustomAction Id="Unregister" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no"/>

Usando este código, la instalación no muestra ningún error, pero dll no se está registrando. Después de la instalación, si ejecuté el script por lotes por separado, entonces se registra.

Register.bat

cd "C: \ Windows \ System32"

regsvr32 "C: \ Archivos de programa (x86) \ ABC \ Abc.dll"

ping -n 15 127.0.0.1> nul:

Anular registro.bat

cd "C: \ Windows \ System32"

regsvr32 / u "C: \ Archivos de programa (x86) \ ABC \ Abc.dll"

ping -n 15 127.0.0.1> nul:

Con Acción personalizada con ExeCommand, muestra un error como falta alguna dependencia dll. El código ExeCommand se da a continuación.

<CustomAction Id="Register" Directory="INSTALLDIR" Execute="deferred" Impersonate="no"
              ExeCommand="[WindowsFolder]System32\regsvr32 &quot;[INSTALLDIR]Abc.dll&quot;" Return="check" />
<CustomAction Id="Unregister" Directory="INSTALLDIR" Execute="deferred" Impersonate="no"
             ExeCommand="[WindowsFolder]System32\regsvr32 /u &quot;[INSTALLDIR]Abc.dll&quot;" Return="check" />

A continuación, se proporciona InstallSequence para ambos casos.

 <InstallExecuteSequence> 
    <Custom Action="Register" Before="InstallFinalize" >NOT Installed</Custom>
    <Custom Action="Unregister" Before="RemoveFiles">Installed AND NOT UPGRADINGPRODUCTCODE</Custom>
 </InstallExecuteSequence>

En ambos casos, creo que se está ejecutando con privilegios elevados.

Este es el error que recibo la mayor parte del tiempo.

Editar

La vista del caminante de dependencia de la dll se muestra a continuación.

También estoy agregando el comando de calor que utilicé. He agregado esto al evento prebuild para generar el componente. Después de eso agregó este componente en el archivo del producto.

llame al archivo "$ (WIX) bin \ heat.exe" "dllPath \ Abc.dll" -dr "INSTALLDIR" -srd -gg -sfrag -suid -out "$ (SolutionDir) Installer \ ComRegisterComponent.wxs"

Y el archivo generado se ve así.

 <Fragment>
    <DirectoryRef Id="INSTALLDIR">
        <Component Id="Abc.dll" Guid="*">
            <File Id="Abc.dll" KeyPath="yes" Source="SourceDir\Abc.dll" />
        </Component>
    </DirectoryRef>
</Fragment>

Aquí esta ruta de SourceDir me está confundiendo. He agregado la ruta exacta en el comando de calor incluso cuando genera este SourceDir.

Respuestas a la pregunta(3)

Su respuesta a la pregunta