Как связать .dll-файлы зависимости с основным продуктом в WiX - PullRequest
0 голосов
/ 15 января 2019

Я создаю установщик wix для проекта .NET со многими зависимостями. В настоящее время у меня есть работающий установщик MSI, но, как и ожидалось, все DLL-файлы зависимостей (а также папка ресурсов) находятся в том же каталоге, что и установленное приложение, а не в комплекте с ним.

Читая ответ на WIX Bundle Creation , кажется возможным сохранить мой продукт как есть в одном файле и иметь другой файл с пакетом, ссылающимся на этот продукт, но я не могу найти какие-либо примеры этого .

Есть ли простой способ сделать это? Я включил схему кода продукта ниже.

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:ui="http://schemas.microsoft.com/wix/UIExtension">  
    <Product Id="*" Name="#####" Language="1033" Version="1.0.0.0" Manufacturer="..." UpgradeCode="...">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Platform="x64"/>

    <Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />
    <UIRef Id="WixUI_InstallDir" />

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

        <Feature Id="ProductFeature" Title="alphaInstaller" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
            <ComponentGroupRef Id="ProductMenuComponents" />
            <ComponentGroupRef Id="DependencyComponents"/>
            <ComponentGroupRef Id="ResourcesComponents"/>
        </Feature>
    </Product>

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
         <Directory Id="ProgramMenu64Folder">
            ...
        </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
          <Component Id="CMP_alphaGUISetup" Win64="yes">
             <File Id="FILE_alphaGUIApplication.exe" Source="$(var.alphaGUI.TargetPath)" KeyPath="yes"></File>
          </Component>
        </ComponentGroup>
    <ComponentGroup Id="ProductMenuComponents" Directory="ApplicationProgramsFolder">
      <Component Id="ApplicationShortcut" Guid="..." >
        <Shortcut .../>
        <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
        <RegistryValue .../>
      </Component>
    </ComponentGroup>
    <ComponentGroup Id="DependencyComponents" Directory="INSTALLFOLDER" Source=...>
      <Component Id="log4net">
        <File Name="log4net.dll" />
      </Component>
        ...
    </ComponentGroup>
    <ComponentGroup Id="ResourcesComponents" Directory="ResourcesFolder" Source=...>
      <Component Id="logo.ico">
        ...
    </ComponentGroup>
    </Fragment>
</Wix>

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Развертывание одного файла? : Я немного не уверен, что это то, о чем вы спрашиваете, но, похоже, вы хотите встроить все dll в один исполняемый файл .NET


Ilmerge.exe : Это не моя область знаний , но есть ответ: Встраивание DLL в скомпилированный исполняемый файл что вы можете проверить. Инструмент Ilmerge.exe - с практическими рекомендациями (см. Также ответ ниже). Макет:

ILMerge.exe /target:winexe /out:All.exe Main.exe one.dll two.dll

Я никогда не использовал это. Я был бы очень удивлен, если бы это работало для всех случаев. Очевидно. Стоит попробовать? Протестируйте объединенный двоичный файл, используя virustotal.com (двоичный файл режима выпуска), чтобы определить, запускаете ли вы какие-либо предупреждения о вредоносном ПО.

Встраивание файла ресурсов : Вы также можете встраивать файлы ресурсов, такие как изображения, HTML-шаблоны и другие вещи, в исполняемый файл .NET, если это то, что вам нужно. Просто самый краткий макет, который я смог найти ( source ):

  • Добавить файл TestFile.txt в качестве встроенного ресурса: Project Menu >> Properties >> Resources >> Add Existing file.

  • Код Доступ: string queryFromResourceFile = Properties.Resources.Testfile.ToString();

Общий проект : Существует неуловимый « Общий проект » для проектов .NET / типа C #, который компилируется в ваш Основной исполняемый файл во время сборки. Не уверен, когда появился этот тип проекта. Он присутствует в VS2017.

Опция одиночного проекта : Очевидно, что вы также можете переместить все файлы кода в один и тот же проект и таким образом скомпилировать исполняемый файл. Я бы не стал этого делать, если вы не собираетесь постоянно хранить все исходные файлы в одном проекте. Иначе вы получите очень глупый процесс сборки? Я думаю, что все варианты должны быть упомянуты, поэтому мы помним или признаем, почему они плохие.

Дополнительные параметры? : Я уверен, что есть дополнительные параметры. Вероятно, некоторые флаги для компилятора, о которых я не знаю. Пожалуйста, добавьте, если вы знаете что-либо. Нашел этот несколько сумасшедший подход на youtube (настройка ресурсов dll для встраивания в проект Visual Studio, а затем добавление кода для чтения встроенной сборки). Интересно, как антивирусное программное обеспечение судит о последнем? Тест с использованием virustotal.com (бинарный режим выпуска). То же самое касается бинарных файлов, слитых с Ilmerge.exe.


Ссылки

0 голосов
/ 18 января 2019

Пожалуйста, добавьте Media Element в файл WXS прямо под элементом пакета, и это должно исправить это.

<Media Id="1" Cabinet="simple.cab" EmbedCab="yes" />
...