Возможно ли для 32-битного NSIS запустить 64-битную программу? - PullRequest
6 голосов
/ 09 ноября 2009

Я портирую программу для Windows с 32 -> 64 бит. Он имеет 32-битный установщик, который написан с использованием NSIS. Могу ли я запустить один из моих новых 64-битных exe-файлов с помощью 32-битного установщика NSIS? Я не думаю, что есть 64-битная версия NSIS ...

Ответы [ 5 ]

15 голосов
/ 10 ноября 2009

Конечно, вы можете, NSIS не накладывает никаких ограничений, и что действительно здорово в NSIS, так это если у вас есть 32- и 64-битные версии вашего приложения, вы можете создать комбинированный установщик и установить необходимые файлы на Основа архитектуры. например,

!include "x64.nsh"

${If} ${RunningX64}
    File ..\x64\blah.exe
${Else}
    File ..\x86\blah.exe
${EndIf}
12 голосов
/ 09 ноября 2009

NSIS использует два Win32 API для выполнения процессов ShellExecute (через ExecShell) и CreateProcess (через Exec и ExecWait), они оба могут запускать 64-битный процесс (x64) из 32-битного процесса NSIS (при условии, что вы работаете в 64-битной ОС).

3 голосов
/ 17 января 2017

Для выполнения процессов, требующих 64-битной операции, я обнаружил, что выполнение NSIS по умолчанию не будет автоматически выполняться в 64-битном режиме. Я столкнулся с этим при попытке запустить DISM для установки .NET Framework 3.5. DISM выдаст ошибку:

"Вы не можете обслуживать работающую 64-битную операционную систему с 32-битной версия DISM. "

Для разрешения я добавил, необходимо добавить DisableX64FSRedirection перед вызовом, который требует 64-битной операции. См. Ниже, например:

${If} ${RunningX64}
   ${DisableX64FSRedirection}
   DetailPrint "Disabling Windows 64-bit file system redirection"
${EndIf}

nsExec::ExecToStack 'Dism.exe /Online /Enable-Feature /FeatureName:NetFx3'

${If} ${RunningX64}
   ${EnableX64FSRedirection}
   DetailPrint "Re-enabling Windows 64-bit file system redirection"
${EndIf}
1 голос
/ 08 февраля 2010

просто чтобы добавить больше описания

посмотри, http://www.autoitscript.com/forum/index.php?showtopic=44048

0 голосов
/ 25 февраля 2015

Хорошо .. здесь есть некоторые ограничения .. например, попробуйте запустить odbcconf.exe для установки драйвера. Я не смог придумать, как это сделать как 64-битную запись. Точно так же, как если бы вы (в 64-битной системе) запускали "powershell x86" от имени администратора, а затем запускали оттуда cmd и odbcconf - я не могу найти простой способ обойти это, заставив odbcconf сделать x64

...