代码之家  ›  专栏  ›  技术社区  ›  Benj

32位NSI是否可以启动64位程序?

  •  5
  • Benj  · 技术社区  · 15 年前

    我正在从32位到64位移植Windows程序。它有一个32位的安装程序,使用NSI编写。我可以使用32位NSI安装程序启动一个新的64位Exe吗?我不认为有64位版本的NSI…

    5 回复  |  直到 8 年前
        1
  •  11
  •   Shay Erlichmen    15 年前

    NSI使用两个win32 API来执行进程 ShellExecute (通过 ExecShell ) CreateProcess (穿过) Exec ExecWait 它们都可以从NSI32位进程运行64位进程(x64)(只要您在64位操作系统上运行)。

        2
  •  15
  •   saschabeaumont    15 年前

    当然可以,NSI不会施加任何限制,而且真正美妙的是,如果你同时拥有32位和64位版本的应用程序,你可以做一个组合安装程序,并按体系结构安装所需的文件。例如

    !include "x64.nsh"
    
    ${If} ${RunningX64}
        File ..\x64\blah.exe
    ${Else}
        File ..\x86\blah.exe
    ${EndIf}
    
        3
  •  3
  •   sonyisda1    8 年前

    对于执行需要64位操作的进程,我发现默认的NSI执行不会在64位模式下自动运行。我在尝试运行DISM安装.NET Framework 3.5时遇到此问题。DISM将错误地声明:

    “不能用32位服务正在运行的64位操作系统 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}
    
        4
  •  1
  •   K. Santosh    15 年前

    只是为了增加更多的描述性

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

        5
  •  0
  •   Stoker    9 年前

    好。。这里有一些限制。例如,尝试运行 odbcconf.exe安装驱动程序。我一直没能想出一个办法让它作为一个64位的条目出现。 我也这么认为,如果你(在64位系统中)以admin的身份启动“powershell x86”,然后从那里运行cmd和odbcconf——我找不到一个简单的方法来绕过它,让odbcconf做x64

    推荐文章