Включить файлы в установщик NSIS, но не обязательно их устанавливать? - PullRequest
0 голосов
/ 11 сентября 2018

Попытка создать собственный установщик NSIS с нуля.

Я вижу команду File для включения файлов, которые вы хотите установить, но мне трудно понять, как выборочно устанавливать файлы. Мой пример использования: я хочу создать один установщик для моего приложения .NET Core x86, моего приложения .NET Core x64 и моего приложения .NET 4.6.1 AnyCpu.

Я думаю, что я выяснил, как определить, куда файлы должны идти ... но на 64-битной машине я не хочу устанавливать 32-битные файлы, и наоборот для 32-битная ОС.

Команда File предлагает вывод. Как включить каталоги для всех трех проектов в программу установки, а установить только нужные файлы для системы?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Существует два способа условной установки файлов.Если вам не нужно позволять пользователю выбирать, вы можете просто выполнить нужные команды File в зависимости от некоторых условий:

!include "LogicLib.nsh"
!include "x64.nsh"

Section
  SetOutPath $InstDir
  ${If} ${RunningX64}
      File "myfiles\amd64\app.exe"
  ${Else}
      File "myfiles\x86\app.exe"
  ${EndIf}
SectionEnd

Если вы хотите, чтобы пользователь мог выбирать, вы можете поставить File команд в разных разделах:

!include "LogicLib.nsh"
!include "x64.nsh"
!include "Sections.nsh"

Page Components
Page Directory
Page InstFiles

Section /o "Native 32-bit" SID_x86
  SetOutPath $InstDir
  File "myfiles\x86\app.exe"
SectionEnd

Section /o "Native 64-bit" SID_AMD64
  SetOutPath $InstDir
  File "myfiles\amd64\app.exe"
SectionEnd

Section "AnyCPU" SID_AnyCPU
  SetOutPath $InstDir
  File "myfiles\anycpu\app.exe"
SectionEnd

Var CPUCurrSel

Function .onInit
  StrCpy $CPUCurrSel ${SID_AnyCPU} ; The default
  ${If} ${RunningX64}
    !insertmacro RemoveSection ${SID_x86}
  ${Else}
    !insertmacro RemoveSection ${SID_AMD64}
  ${EndIf}
FunctionEnd

Function .onSelChange
  !insertmacro StartRadioButtons $CPUCurrSel
    !insertmacro RadioButton ${SID_x86}
    !insertmacro RadioButton ${SID_AMD64}
    !insertmacro RadioButton ${SID_AnyCPU}
  !insertmacro EndRadioButtons
FunctionEnd
0 голосов
/ 12 сентября 2018

NSIS предлагает несколько способов проверки условий, например, StrCmp или IntCmp, но наиболее простым, вероятно, является использование библиотеки LogicLib

.

Пример:

!include "LogicLib.nsh"
!include "x64.nsh"

Section
  ${If} ${RunningX64}
      File "that_64bit_file"
  ${Else}
      File "that_32bit_file"
  ${EndIf}
SectionEnd
...