【问题标题】:Is it possible for 32 bit NSIS to launch a 64 bit program?32 位 NSIS 是否可以启动 64 位程序?
【发布时间】:2009-11-09 11:47:39
【问题描述】:

我正在从 32 -> 64 位移植一个 Windows 程序。它有一个使用 NSIS 编写的 32 位安装程序。我可以使用 32 位 NSIS 安装程序启动我的新 64 位 exe 之一吗?我认为没有 64 位版本的 NSIS...

【问题讨论】:

    标签: windows installation nsis


    【解决方案1】:

    当然可以,NSIS 不会施加任何限制,而 NSIS 的真正妙处在于,如果您同时拥有 32 位和 64 位版本的应用程序,您可以执行组合安装程序,并在每个服务器上安装所需的文件。架构基础。例如

    !include "x64.nsh"
    
    ${If} ${RunningX64}
        File ..\x64\blah.exe
    ${Else}
        File ..\x86\blah.exe
    ${EndIf}
    

    【讨论】:

    • 嗨,我知道这是旧的,但我已经尝试过了,如果我尝试这种方法,它似乎仍然安装了 32bit.exe。为什么哦为什么?
    • @DanielCasserly 不应该有什么神奇的东西——这就是我仍在使用的代码。当我第一次构建我的安装程序时,它是从 NSIS 网站上的一个示例中获取的
    【解决方案2】:

    NSIS 使用两个 Win32 API 来执行进程 ShellExecute(直通 ExecShell)和 CreateProcess(直通 ExecExecWait),它们都可以从 NSIS 32 位运行 64 位进程 (x64)进程(只要您在 64 位操作系统上运行)。

    【讨论】:

    • 哦,好吧,我认为不可能从 32 位进程创建 64 位进程。我有什么特别的事情要做吗?
    • 我一直发现,当我启动 cmd 之类的东西时,它们会卡在 32 位模式下,无法运行任何 64 位实用程序(Windows 10 64 位)。 @sonyisda1 的回答更好
    【解决方案3】:

    对于执行需要 64 位操作的进程,我发现默认的 NSIS 执行不会自动以 64 位模式运行。我在尝试运行 DISM 安装 .NET Framework 3.5 时遇到了这个问题。 DISM 会报错:

    “您无法使用 32 位操作系统来服务正在运行的 64 位操作系统 DISM 版本。”

    为了解决我添加的需要在需要 64 位操作的调用之前添加 DisableX64FSRedirection。见下例:

    ${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}
    

    【讨论】:

      【解决方案4】:

      只是为了添加更多描述性

      看看, http://www.autoitscript.com/forum/index.php?showtopic=44048

      【讨论】:

        【解决方案5】:

        嗯..这里有一些限制..例如,尝试运行 odbcconf.exe 安装驱动程序。我还没有找到一种方法来让它作为 64 位条目出现。 我认为就像您(在 64 位系统中)以管理员身份启动“powershell x86”,然后从那里运行 cmd 和 odbcconf 一样 - 我找不到简单的方法来解决它,让 odbcconf 执行 x64

        【讨论】:

          猜你喜欢
          • 2013-03-11
          • 1970-01-01
          • 2012-01-19
          • 2013-01-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多