代码之家  ›  专栏  ›  技术社区  ›  Igor Zevaka

如何从32位进程启动64位进程

  •  26
  • Igor Zevaka  · 技术社区  · 15 年前

    我试图从我们的32位.NET应用程序运行一个64位可执行文件(Java.exe)。我正在使用 Process 类和调用 cmd /c <command name> 为了支持所有可能的命令(如 dir , cd 等)。

    问题是,在我的计算机上,我安装了64位版本的JRE和java.exe,只能从 C:\Windows\System32 文件夹(X64)。我试图明确地启动64位版本的 cmd.exe 通过呼叫 C:\Windows\System32\cmd.exe 但是它被重定向到 SysWOW64 因为调用进程是32位的。

    我还能做些什么让这个工作吗?

    编辑 整体 cmd /c 这有点像一条红鲱鱼。这不是问题的一部分,能够运行64位可执行文件就是问题的一部分。

    4 回复  |  直到 15 年前
        1
  •  31
  •   Michael    15 年前

    您可以在调用process时暂时禁用文件系统重定向。start,p/invoke的相应API是 Wow64DisableWow64FsRedirection Wow64RevertWow64FsRedirection .

    另一个选项是使用Windows Vista及更高版本上提供的%windir%\sysnative。

        2
  •  11
  •   Nikolai    11 年前

    您要做的是使用%windir%\sysnative解析64位cmd.exe,然后通过“/c”命令行选项启动其他64位程序。

        3
  •  3
  •   DenNukem    9 年前
    c:\>set proc
    PROCESSOR_ARCHITECTURE=x86
    PROCESSOR_ARCHITEW6432=AMD64
    PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 70 Stepping 1, GenuineIntel
    PROCESSOR_LEVEL=6
    PROCESSOR_REVISION=4601
    
    c:\>c:\windows\sysnative\cmd
    Microsoft Windows [Version 6.1.7601]
    Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
    
    c:\>set proc
    PROCESSOR_ARCHITECTURE=AMD64
    PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 70 Stepping 1, GenuineIntel
    PROCESSOR_LEVEL=6
    PROCESSOR_REVISION=4601
    
    c:\>
    
        4
  •  2
  •   Santhosh    15 年前

    以防万一…… http://msdn.microsoft.com/en-us/library/aa384187(VS.85).aspx

    注意,如果显示应用程序以显示UAC提示,则不会进行重定向。还有一些文件夹不受重定向的限制。

    推荐文章