WiX Heat.exe генерирует различный вывод после VS2008 — & gt; VS2015 обновление

Выполняем следующую командную строку с высокой температурой (3.0.5210.0):

heat.exe -srd -suid file OurLib.dll -out bin_OurLib.tmp

OurLib.dll — это DLL-файл VC ++ 2008, это COM-компонент.

Выход (bin_OurLib.tmp)

    <?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="TARGETDIR">
<Component Id="OurLib.dll" Guid="PUT-GUID-HERE">
<File Id="OurLib.dll" KeyPath="yes" Source="SourceDir\OurLib.dll">
<Class Id="{B1AB297C-1BC6-65E1-A7C1-A1833DFAED6A}" Context="InprocServer32" Description="OurProduct.OurLib">
<ProgId Id="OurProduct.OurLib" Description="OurProduct.OurLib" />
</Class>
</File>
</Component>
</DirectoryRef>
</Fragment>
</Wix>

Это отлично работает.
Теперь мы обновили VS до 2015 года и скомпилировали OurLib с ним.
Выполнение одной и той же команды нагрева теперь приводит к другому выводу:

    <?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="TARGETDIR">
<Component Id="OurLib.dll" Guid="PUT-GUID-HERE">
<Class Id="{B1AB297C-1BC6-65E1-A7C1-A1833DFAED6A}" Context="InprocServer32" Description="OurProduct.OurLib">
<ProgId Id="OurProduct.OurLib" Description="OurProduct.OurLib" />
</Class>
<File Id="OurLib.dll" KeyPath="yes" Source="SourceDir\OurLib.dll" />
<RegistryValue Root="HKCR" Key="CLSID\{B1AB297C-1BC6-65E1-A7C1-A1833DFAED6A}\InProcServer32" Value="&quot;[#OurLib.dll]&quot;" Type="string" Action="write" />
</Component>
</DirectoryRef>
</Fragment>
</Wix>

И когда wix связывает, выдает ошибку:

ошибка LGHT0130: первичный ключ ‘reg51A1FC16367511AF81E9B18CA009A1C6’ продублирован в таблице ‘Registry’. Пожалуйста, удалите одну из записей или переименуйте часть первичного ключа, чтобы избежать столкновения.

Проверяя файл wixobj, reg51A1FC16367511AF81E9B18CA009A1C6 связан со строкой
<Class Id="{B1AB297C-1BC6-65E1-A7C1-A1833DFAED6A}...." а также <RegistryValue Root="HKCR" Key="CLSID\{B1AB.... — очевидно.

Кстати, это, очевидно, связано с тем, что сгенерированные выходные файлы wix отличаются.
Почему это происходит, если компиляция dll с использованием более нового компилятора C ++ приведет к тому, что WIX HEAT будет генерировать разные выходные данные при выполнении тех же параметров и т. Д.

И как мне вернуть обратно тот же «старый» вывод, который нам нужен.

Пробовал с -scom и -sreg, ни один из них не возвращал «старый» вывод.

0

Решение

Ну, дублированный первичный ключ означает, что у вас есть то же RegistryValue в двух разных местах в вашем исходном коде wix.

Или, может быть, новая DLL самостоятельно регистрируется? Это помещает значение InProcServer32 в кавычки. Я не думаю, что это нормально.

Или вы проверили, что ваши исходные и проектные файлы DLL 2008 и 2015 годов идентичны? Процесс обновления проекта VS меняет дело …

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]