问题标签 [syswow64]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
7515 浏览

windows-vista - 为什么 Windows Vista 64 位默认使用 32 位 cmd.exe?(特定于机器)

情况:

我需要将我们当前的开发环境从 Windows XP 32 位转换为 Windows Vista 64 位 (*)。自然地,我在我们的构建系统中遇到了很多硬编码路径存在问题的地方(例如“ C:\Program Files”变成“ C:\Program Files (x86)”)。幸运的是,有一个%ProgramFiles%环境变量可以根据源进程(32 位或 64 位)映射到正确的目录。所以我用 更新了构建脚本%ProgramFiles%,我确信这会结束。

从命令行 ( C:\Windows\System32\cmd.exe) 调用构建环境。

问题: 在一台特定的机器上(即我工作的开发机器),它C:\Windows\System32\cmd.exe实际上是一个 32 位进程,所以脚本找到了目录的x86版本,Program Files一切都很好。

在我能找到的所有其他 64 位机器(包括我的家用机器)上,C:\Windows\System32\cmd.exe都是 64 位版本,而 32 位版本在C:\Windows\SysWow64\cmd.exe. 所以构建脚本找不到他们正在寻找的任何东西并且失败了。

我现在明白了,cmd.exe如果你需要的话,应该明确调用 32bit ,默认情况下你会得到一个 64bit cmd.exe。典型案例WORKSFORME...

问题是,这不正确的机器发生了什么?为什么我cmd.exe在一台机器上默认获得 32 位,而在其他机器上却没有?在所有情况下,我都是C:\Windows\System32\cmd.exeStart|Run菜单中显式执行,但仅在一台机器上得到不同的结果。都运行相同版本的 Vista 64 位。

有什么想法或见解吗?

(*) 请接受我必须这样做。我无权说出我为什么要这样做。从头开始重新安装操作系统和一切可能会起作用,但这肯定是矫枉过正。此外,说服我们的 IT 部门提供 Vista 机器已经够难的了!

0 投票
5 回答
186508 浏览

dll - 为什么在 64 位 Windows 上 64 位 DLL 转至 System32 而 32 位 DLL 转至 SysWoW64?

我想知道我们什么时候需要在下面放置一个文件

C:\Windows\System32 或 C:\Windows\SysWOW64,在 64 位 Windows 系统上。

我有两个 DLL,一个用于 32 位,一个用于 64 位。

从逻辑上讲,我认为我会将 32 位 DLL 放在 C:\Windows\System32 下,将 64 位 DLL 放在 C:\Windows\SysWOW64 下。

令我惊讶的是,情况恰恰相反32位 DLL进入C:\Windows\SysWOW 6464位 DLL 进入 C:\Windows\System 32

很混乱的东西。这背后的原因是什么?

0 投票
3 回答
5174 浏览

windows - MSI 安装程序,64 位操作系统,写入 \windows\system32\inetsrv 文件夹

在 Windows Server 2008 64 位上,我需要一个 .msi 安装程序文件来将一些文件写入 \windows\system32\inetsrv 文件夹。(这些文件是一些 XML 架构验证文件,C# XmlReaderSettings.Schema.Add() 期望位于该文件夹中)。

当安装程序运行时,文件最终位于 \windows\SysWOW64\inetsrv 文件夹中,而不是它们需要的位置。

我试图让安装程序然后写入 \windows\Sysnative 文件夹,并且安装程序创建了一个具有该确切名称的文件夹,这是我没想到的。有关抑制 SysWOW64 重定向的详细讨论,请参阅此页面

我应该如何让 .msi 将我的文件写入 Windows 2008 64 位上的 \windows\system32\inetsrv 文件夹?

0 投票
7 回答
30893 浏览

.net - 如何从 32 位进程启动 64 位进程

我正在尝试从我们的 32 位 .NET 应用程序运行 64 位可执行文件 (java.exe)。我正在使用Process类和调用cmd /c <command name>以支持所有可能的命令(如dircd)。

问题是我在我的机器上安装了 64 位版本的 JRE,而 java.exe 只能从C:\Windows\System32文件夹 (x64) 中使用。我已经尝试通过调用显式启动 64 位版本,cmd.exe但由于调用进程是 32 位,C:\Windows\System32\cmd.exe它被重定向到。SysWOW64

我还能做些什么来让它工作吗?

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

0 投票
1 回答
2896 浏览

com - 如何使用 SysWOW64\cscript 或 wscript 中的 32 位 COM 组件解决“灾难性故障”

我正在尝试在 Windows Server 2008 R2 上运行使用 7 年历史的第 3 方 32 位 COM 组件的 VBScript 脚本,并使用命令行 32 位脚本主机 SysWOW64\cscript.exe。当我在类上调用 CreateObject 时,它似乎是成功的,但是当我第一次尝试在对象上使用属性或方法(我尝试过几种不同的方法)时,它给了我“灾难性的失败”。我与 SysWOW64\wscript.exe 有相同的结果,当然,除了我的错误消息出现在 msgbox 中而不是命令行窗口中。

我认为这与 64 位脚本主机有关,原因如下:

  1. 等效的 Classic ASP 脚本调用相同的组件并使用 95% 的相同代码,在同一台服务器上正常工作,IIS 配置为支持 32 位 COM。
  2. 相同的 VBScript 在 32 位 Windows XP 机器和 32 位 Windows Server 2003 机器上正常工作。
  3. 该组件在我的 64 位 Windows 7 机器上以完全相同的方式失败。

我在谷歌上搜索这个问题的解决方案,大部分都发现了很多不同的问题,这些问题通过将 COM 组件放入 Visual Studio 的工具栏中得到了解决。显然,该解决方案不适用于此处。

我的问题是:

  1. 是否存在始终导致 Windows 脚本主机调用 COM 组件的“灾难性故障”背后的核心问题?
  2. 在配置管理单元或注册表中是否有一个地方,我需要进行类似于我必须对 IIS 应用程序池进行更改以“启用 32 位应用程序”的更改?
  3. Server 2008 R2 事件查看器中是否有我应该查看的一般位置,以查看是否有更多关于故障的详细信息,以防它被证明是特定于该组件的?

提前致谢。

0 投票
3 回答
8325 浏览

vb.net - Windows 7 中的 System32 文件夹

我在 XP 32 位操作系统中使用此代码来获取%windir%\windows\system32文件夹路径。

我想知道的是,%windir%\windows\syswow64在 Windows 7(64/32 位)中使用时,相同的代码会返回文件夹吗?

0 投票
4 回答
1633 浏览

winapi - 64 位进程如何拥有文件系统和注册表的 32 位视图?

为了向后兼容,我的 64 进程需要查看文件系统和注册表的 32 位视图。

我知道如何让 32 位进程看到文件系统和注册表的 64 位视图(使用 Wow64DisableWow64FsRedirection 和 Wow64RevertWow64FsRedirection)

但是如何使 64 位进程具有文件系统和注册表的 32 位视图?

0 投票
1 回答
18166 浏览

64-bit - 如何从 CreateProcess (C++) 启动 64 位版本的 javaw.exe

我正在用 C++ 编写一个启动器来在 Windows 上启动我的基于 java 的 GUI 应用程序。我CreateProcess用来启动“javaw.exe”。除了总是启动 32 位版本的“javaw.exe”之外,一切正常。

安装 java 时,它会将可执行文件“java.exe”和“javaw.exe”%windir%\System32放在 32 位窗口中。在 64 位 Windows 上,它会将相同的可执行文件放入%windir%\SysWow64.

有3种可能:

  1. 在 32 位 windows 上执行的 32 位启动器:%windir%\System32在搜索路径中,找到了 32 位 javaw.exe。GUI 启动。一切正常。

  2. 在 64 位 Windows 上执行的 32 位启动器:%windir%\System32位于搜索路径中。%windir%\System32被重定向到%windir%\SysWow64(因为在这种情况下我的启动器是 32 位的)。找到 32 位 javaw.exe。GUI 启动。一切正常。

  3. 在 64 位窗口上执行的 64 位启动器:%windir%\System32在搜索路径中。不会发生重定向。它不包含可执行的 javaw.exe。启动器失败。

在第三种情况下如何启动 64 位 javaw.exe?

0 投票
1 回答
4011 浏览

wcf - 向 IIS7.5 注册 COM .dll (REGDB_E_CLASSNOTREG)

这个问题快把我逼疯了。我有一个 WCF 服务,它使用 COM .dll(位于 SysWOW64 中)来执行一些操作。我在 Windows 2008 R2 上注册了它,但是当服务部署在服务器上时它不起作用。我的服务是为“任何 cpu”编译的。

当我创建一个控制台应用程序时,它工作正常。我究竟做错了什么?是权限问题吗?我将应用程序池用户更改为管理员,但也不起作用。当我尝试将池更改为 32 位应用程序时,池崩溃或服务超时。

错误信息是:

System.Runtime.InteropServices.COMException: Retrieving the COM class factory for component with CLSID {47E736CA-3EEA-11D5-8400-00A0C9CA15AD} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

谁能指出我正确的方向?

0 投票
3 回答
3760 浏览

windows - 为什么复制到 system32 会自动复制到 sysWOW64?

我正在尝试通过调用 CopyFileA 将文件复制到 C:\windows\system32 - 调试显示字符串“C:\windows\system32\filename”确实被发送到 CopyFileA,但我的文件被复制到“C:\ windows\system32\sysWOW64\filename" 代替。有谁知道为什么会这样?