Heat.exe не может собрать информацию о TypeLib из 64-битной COM DLL
У меня есть 64-битная COM DLL, из которой я хочу собирать информацию о typelib, используя heat.exe. Но когда я пытаюсь это сделать, я получаю ошибку 193 (неверный формат исполняемого файла). Является ли heat.exe 32-разрядным и не может работать с 64-разрядными исполняемыми файлами? Я нашел только одну версию heat.exe на моей машине.
Благодарю.
4 ответа
К несчастью heat.exe
действительно является 32-битным и поэтому может собирать только 32-битные регистрации COM: http://wixtoolset.org/issues/1661/
Однако 64-битный heat.exe
расширения обсуждаются здесь: http://sourceforge.net/p/wix/mailman/message/30541133/ а код можно найти здесь: https://wix.codeplex.com/SourceControl/network/forks/roberthyang/NewHeatExtension/latest
В моем случае мне понадобился отдельный пакет для 32- и 64-битных COM-библиотек. Использование урожая из 32-битной DLL работало на 64-битной версии. Просто нужно было убедиться, что конфигурация сборки была 64-битной.
У меня были похожие проблемы, связанные с сборкой библиотек vb6 и non .net. Можете ли вы попробовать тепло с -scom -o
Если это не решит проблему, вы можете вставить свою команду тепла здесь.
Если вы можете позволить предупреждениям течь, и у вас очень небольшое количество файлов в виде 64-битной DLL, вы можете попробовать следующее:
- запустите HEAT.EXE как обычно, создав выходной файл;
- Отредактируйте файл и добавьте SelfRegCost="0" к каждому элементу файла, который необходимо включить.
Пример:
<Directory Id="dir..." Name="MyDLL">
<Component Id="cmp..." Guid="...">
<File Id="fil..." KeyPath="yes"
Source="...\MyDLLFile.dll"
SelfRegCost="0" />
</Component>
</Directory>
https://wixtoolset.org/documentation/manual/v3/xsd/wix/file.html
Мне пришлось управлять только одной такой DLL в моем пакете, и она работала