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

В зависимости от того, что вы пытаетесь сделать, может быть решение, если вам просто нужно добавить атрибут Win64, вы можете сделать это с помощью Candle.exe, см. Здесь

В противном случае вы также можете найти известную ошибку, которая не устранена.

В моем случае мне понадобился отдельный пакет для 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 в моем пакете, и она работала

Другие вопросы по тегам