Включая DLL-файлы с установщиком WiX - PullRequest
1 голос
/ 14 мая 2019

Я создал приложение на C # winforms, которое использует библиотеку Ghostscript, и я создал установщик wix msi, чтобы загрузить его на любой компьютер.В самом приложении winforms у меня в качестве файлов ресурсов установлены Ghostscript.NET.dll (обертка c # для библиотек gs / dlls) и gsdll32.dll (32-битная нативная библиотека).Я создал проект wix (создает wixattempt2.msi), чтобы установить приложение и файлы dll в папку «Программы» (x86) и показать приложение в меню «Пуск».Затем я собрал пакет загрузчика wix (создает POD_Installer.exe), чтобы я мог запустить программу установки (wixattempt2.msi) и установить пакет NetFx461Redist, если это необходимо.

Когда я запускаю POD_Installer.exe, компоненты, которые я установил, оказываются вместе в правильной папке.Однако у меня возникают проблемы, когда я собираюсь использовать приложение winforms.Когда я попадаю в ту часть приложения, которая использует ghostscript, я получаю сообщение об ошибке «Не удалось найти нативную библиотеку ghostscript».Когда я раскрываю сообщение, в нем отображаются все устанавливаемые компоненты, кроме gsdll32.dll.Какие изменения я делаю в своем проекте wix, чтобы у меня не было проблем?

Вот wixattempt2.msi:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="*" Name="POD" Language="1033" Version="1.0.0.0" Manufacturer="POD" UpgradeCode="PUT-GUID-HERE">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

    <Icon Id="Ruler.ico" SourceFile="Ruler.ico"/>
        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate />
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="POD" />
      </Directory>
      <Directory Id="ProgramMenuFolder">
        <Directory Id="ApplicationProgramsFolder" Name="POD"/>
      </Directory>
    </Directory> 

    <DirectoryRef Id="INSTALLFOLDER">
      <Component Id="_6lumber.exe" Guid="*">
        <File Id="_6lumber.exe" Source="POD.exe" KeyPath="yes" Checksum="yes"/>
      </Component>
            <Component Id="_notepadcalc.exe" Guid="*">
        <File Id="_notepadcalc.exe" Source="notepadcalc2.exe" KeyPath="yes" Checksum="yes"/>
      </Component>
      <Component Id="Erics_takeoff_103118.xlsx" Guid="*">
        <File Id="Erics_takeoff_103118.xlsx" Source="Erics_takeoff_103118.xlsx" KeyPath="yes"/>
      </Component>
      <Component Id="gs.dll" Guid="*" >
        <File Id="gs.dll" Source="gsdll32.dll" KeyPath="yes"/>
      </Component>
      <Component Id="gsnet.dll" Guid="*">
        <File Id="gsnet.dll" Source="Ghostscript.NET.dll" KeyPath="yes"/>
      </Component>
    </DirectoryRef>
    <DirectoryRef Id="ApplicationProgramsFolder">
      <Component Id="ApplicationShortcut" Guid="*">
        <Shortcut Id="ApplicationStartMenuShortcut"
                  Name="POD" Icon="Ruler.ico"
                  Description="My Application Description"
                  Target="[#_6lumber.exe]"
                  WorkingDirectory="INSTALLFOLDER"/>
        <Shortcut Id="ApplicationStartMenu"
                  Name="POD_CAD" Icon="Ruler.ico"
                  Description="My Application Description"
                  Target="[#_notepadcalc.exe]"
                  WorkingDirectory="INSTALLFOLDER"/>

        <RemoveFolder Id="CleanUpShortCut" Directory="ApplicationProgramsFolder" On="uninstall"/>
        <RegistryValue Root="HKCU" Key="Software\Microsoft\POD" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
      </Component>
    </DirectoryRef>

        <Feature Id="POD" Title="POD" Level="1">
            <ComponentRef Id="gs.dll"/>
      <ComponentRef Id="gsnet.dll"/>
            <ComponentRef Id="_6lumber.exe" />
      <ComponentRef Id="_notepadcalc.exe"/>
      <ComponentRef Id="Erics_takeoff_103118.xlsx"/>
      <ComponentRef Id="ApplicationShortcut"/>
        </Feature>
    </Product>  

</Wix>

РЕДАКТИРОВАТЬ: начальный загрузчик для создания POD_Installer.exe

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
    <Bundle Name="POD_Installer" Version="1.0.0.0" Manufacturer="POD" UpgradeCode="732da7cb-f953-4cfd-af6e-5c25db16b47c">
        <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
      <bal:WixStandardBootstrapperApplication
        LogoFile="Resources\custom_icon_design_flatastic_10_ruler-3.png"
        LicenseFile="Resources\mylittlelicense.rtf"
        />
    </BootstrapperApplicationRef>
    <PayloadGroup Id="NetFx461RedistPayload" >
      <Payload Name="redist\NDP461-KB3102436-x86-x64-AllOS-ENU.exe"
               SourceFile="Resources\NDP461-KB3102436-x86-x64-AllOS-ENU.exe" />
    </PayloadGroup>
        <Chain>
            <!-- TODO: Define the list of chained packages. -->
            <!-- <MsiPackage SourceFile="path\to\your.msi" /> -->
      <PackageGroupRef Id="NetFx461Web"/>
      <MsiPackage Id="POD_Measuring_Tool" SourceFile="C:\Users\Admin\source\repos\wixattempt2\wixattempt2\bin\Debug\wixattempt2.msi"
                  Cache="yes" ForcePerMachine ="yes"/>

    </Chain>        
    </Bundle>
</Wix>

1 Ответ

0 голосов
/ 15 мая 2019

Административная установка : Сначала нам нужно определить, действительно ли упомянутый вами файл действительно присутствует в MSI. Давайте сделаем установку администратора - прославленное извлечение файлов - MSI. В cmd.exe (командная строка) введите следующую команду:

msiexec.exe /a "Setup.msi"

Пожалуйста, смотрите этот ответ для более подробной информации: Административная установка . Теперь убедитесь, что файл, на который вы ссылаетесь, находится в папке извлечения. Мы возьмем это оттуда?

Несоответствие : существует несоответствие между именем файла и Компонентом и Идентификатором файла в исходном коде, это не должно иметь значения, поскольку вы обращаетесь к нему правильно в другом месте, но вы возможно, захотите синхронизировать это:

<Component Id="gs.dll" Guid="PUT-GUID-HERE" >
  <File Id="gs.dll" Source="gsdll32.dll" KeyPath="yes"/>
</Component>
...