问题标签 [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.
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.exe
从Start|Run
菜单中显式执行,但仅在一台机器上得到不同的结果。都运行相同版本的 Vista 64 位。
有什么想法或见解吗?
(*) 请接受我必须这样做。我无权说出我为什么要这样做。从头开始重新安装操作系统和一切可能会起作用,但这肯定是矫枉过正。此外,说服我们的 IT 部门提供 Vista 机器已经够难的了!
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 64,64位 DLL 进入 C:\Windows\System 32。
很混乱的东西。这背后的原因是什么?
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 文件夹?
.net - 如何从 32 位进程启动 64 位进程
我正在尝试从我们的 32 位 .NET 应用程序运行 64 位可执行文件 (java.exe)。我正在使用Process
类和调用cmd /c <command name>
以支持所有可能的命令(如dir
等cd
)。
问题是我在我的机器上安装了 64 位版本的 JRE,而 java.exe 只能从C:\Windows\System32
文件夹 (x64) 中使用。我已经尝试通过调用显式启动 64 位版本,cmd.exe
但由于调用进程是 32 位,C:\Windows\System32\cmd.exe
它被重定向到。SysWOW64
我还能做些什么来让它工作吗?
编辑整个cmd /c
事情有点像红鲱鱼。这不是问题的一部分,能够运行 64 位可执行文件是。
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 位脚本主机有关,原因如下:
- 等效的 Classic ASP 脚本调用相同的组件并使用 95% 的相同代码,在同一台服务器上正常工作,IIS 配置为支持 32 位 COM。
- 相同的 VBScript 在 32 位 Windows XP 机器和 32 位 Windows Server 2003 机器上正常工作。
- 该组件在我的 64 位 Windows 7 机器上以完全相同的方式失败。
我在谷歌上搜索这个问题的解决方案,大部分都发现了很多不同的问题,这些问题通过将 COM 组件放入 Visual Studio 的工具栏中得到了解决。显然,该解决方案不适用于此处。
我的问题是:
- 是否存在始终导致 Windows 脚本主机调用 COM 组件的“灾难性故障”背后的核心问题?
- 在配置管理单元或注册表中是否有一个地方,我需要进行类似于我必须对 IIS 应用程序池进行更改以“启用 32 位应用程序”的更改?
- Server 2008 R2 事件查看器中是否有我应该查看的一般位置,以查看是否有更多关于故障的详细信息,以防它被证明是特定于该组件的?
提前致谢。
vb.net - Windows 7 中的 System32 文件夹
我在 XP 32 位操作系统中使用此代码来获取%windir%\windows\system32
文件夹路径。
我想知道的是,%windir%\windows\syswow64
在 Windows 7(64/32 位)中使用时,相同的代码会返回文件夹吗?
winapi - 64 位进程如何拥有文件系统和注册表的 32 位视图?
为了向后兼容,我的 64 进程需要查看文件系统和注册表的 32 位视图。
我知道如何让 32 位进程看到文件系统和注册表的 64 位视图(使用 Wow64DisableWow64FsRedirection 和 Wow64RevertWow64FsRedirection)
但是如何使 64 位进程具有文件系统和注册表的 32 位视图?
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种可能:
在 32 位 windows 上执行的 32 位启动器:
%windir%\System32
在搜索路径中,找到了 32 位 javaw.exe。GUI 启动。一切正常。在 64 位 Windows 上执行的 32 位启动器:
%windir%\System32
位于搜索路径中。%windir%\System32
被重定向到%windir%\SysWow64
(因为在这种情况下我的启动器是 32 位的)。找到 32 位 javaw.exe。GUI 启动。一切正常。在 64 位窗口上执行的 64 位启动器:
%windir%\System32
在搜索路径中。不会发生重定向。它不包含可执行的 javaw.exe。启动器失败。
在第三种情况下如何启动 64 位 javaw.exe?
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)).
谁能指出我正确的方向?
windows - 为什么复制到 system32 会自动复制到 sysWOW64?
我正在尝试通过调用 CopyFileA 将文件复制到 C:\windows\system32 - 调试显示字符串“C:\windows\system32\filename”确实被发送到 CopyFileA,但我的文件被复制到“C:\ windows\system32\sysWOW64\filename" 代替。有谁知道为什么会这样?