问题标签 [wow64]

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 投票
1 回答
2505 浏览

c# - 从 32 位 C# 到 64 位 C++ 的 PostMessage 参数

我在传递指针的内容时遇到问题,因为 32 位 C# 应用程序的 wParam 正在更改为 64 位 C++ 进程。

有两个进程 32.exe(在 C# 中)和 64.exe(在 C++ 中)。64.exe 作为 32.exe 的子进程启动。64.exe 的 32.exe 发布窗口消息,其中一个具有 wParam,它是指向 RECT 结构数组的指针。64.exe 和 32.exe 都有一个共同的 DLL(用 C++ 编写,当然是为不同的平台编译的),称为 32.dll 和 64.dll。

在 32.dll 中需要 RECT* 的函数直接从 32.exe 调用,使用相同的 RECT* 稍后发布,这很好用。之后它向 64.exe 发送一条消息,它调用相同的函数并将 wParam 转换为 RECT*:

该消息发布如下:

通过调试,我已经确认收到了消息,但是 wParam 地址与以前不同。这并不意外,但它现在指向的内存内容是未定义的(当我试图查看那里的内容时,我遇到了访问冲突)。

这里发生了什么?

0 投票
3 回答
5186 浏览

iis-7 - WOW64下如何卸载IIS 7?

在我维护的 Web 服务器安装程序中,我们跟踪安装程序是否安装了 IIS 7 和/或 ASP(在 Vista 或更高版本下),如果是,则将适当的值保存到注册表中。在卸载过程中,如果该值存在并且该计算机上没有其他网站正在使用 IIS,则会询问用户是否要删除 IIS/ASP。如果是这样,我们将删除我们安装的任何内容。

以下是我们启动以删除 IIS 7 和 ASP 的命令(为清楚起见添加了换行符):

这在 32 位系统上运行良好,但在 64 位系统上根本不起作用,即使禁用了 WOW64 重定向。(忽略 /norestart 参数,因为安装程序在安装结束时会在必要时重新启动。)我什至尝试将此命令输入到管理员级别的命令提示符(没有 /norestart 参数),但无济于事.

我们在安装过程中用来安装 IIS 7/ASP 的命令也同样长,而且它总是有效,所以我无法想象问题是卸载命令行太长。(为了验证这个理论,我什至尝试将命令分成两个命令,一个只删除 ASP 组件,一个删除其余组件。同样的问题,没有删除任何内容。)

是否有其他命令可以在 64 位系统上执行我们想要的操作?如果是这样,我们是否必须禁用 WOW64 重定向,它是否也适用于 32 位系统?(它只会在 Vista 和更高版本的系统上调用。在更早的系统上,我们依靠用户确保预先安装了 IIS 和 ASP。)

0 投票
2 回答
2489 浏览

windows - SHGetSpecialFolderPath,如何从 32 位应用程序访问 64 位 CSIDL

在 64 位系统上运行的 32 位应用程序是否可以访问 64 位应用程序的默认文件夹?

例如,在 32 位应用程序中使用带有 CSIDL_PROGRAM_FILES 的 SHGetSpecialFolderPath 会返回“C:\Program Files (x86)” 如果从 64 位应用程序中使用相同的调用,我会得到“C:\Program Files”。有没有办法获得来自 32 位应用程序的“C:\Program Files”?

这里的一个相关问题对SHGetFolderPath() 32 位与 64 位没有帮助,也没有在调用 SHGetSpecialFolderPath 之前抑制 wow64 文件系统重定向

0 投票
1 回答
993 浏览

registry - 如何在不使用 C++ 中的 RegDeleteKeyEx 的情况下在 64 位树中删除 Windows x64 中的注册表项?

我正在开发一个 32 安装程序,它必须在 Win XP 以上的环境中运行。我们有一个问题,我们必须在 Windows 2k3 x64 下删除注册表的 x64 部分上的注册表项。

使用 RegDeleteKeyEx 很容易,但我无法分发可能调用该函数的可执行文件,因为它无法在 Windows XP 上运行。我可以很容易地掌握钥匙,我只是看不出我应该如何删除它。

我不能使用 RegDeleteKey,因为注册表重定向会阻碍我在 x64 平台上的努力。我很生气,我不能只将一个句柄传递给我的密钥,以及一个空/空子密钥字符串。我不敢相信这个 API 这么坏。我错过了什么吗?

目前我唯一的想法是调用一个注册表文件或一个单独的可执行文件来为我完成这项工作,但这实在是太难看了,而且只会让一个糟糕的解决方法变得更糟。有没有更好的办法?

0 投票
2 回答
2386 浏览

c# - 从 Windows x64 中的句柄获取可执行文件名

我有编译为 x86 的 ac# 应用程序,因此它在 Windows 7 x64 上作为 32 位应用程序运行。在应用程序运行时,我需要检测活动窗口的可执行文件名。在 Winodws XP 上,以下代码运行良好(从活动窗口句柄获取进程文件名)。在 x64 上,它只报告 32 位进程的名称(为其他进程返回垃圾,可能是因为我没有检查返回的数据)。我正在传递使用 GetForegroundWindow API 获得的活动窗口的句柄。

我可以在 64 位环境中从 32 位进程中获取该信息吗?谢谢。安德烈亚

0 投票
1 回答
1413 浏览

windows - 64 位 Windows 2008 上的 32 位 cluster.exe

我们有一个在 Perl 32 位中运行的安装程序。该程序需要获取有关集群资源的信息,因此它运行 cluster.exe(使用反引号)并解析其输出。

在 Windows Server 2003 上这很顺利,因为 syswow64 下存在一个 32 位版本的 cluster.exe。但是,Windows Server 2008 上不存在这样的 32 位版本,因此 cluster.exe 的反引号运行表示找不到这样的可执行文件,因为 32 位进程在 syswow64 下查找它。

有人能想出一种我们可以绕过这个问题并获取集群资源信息的方法吗?一种手动方法是从 system32 复制 64 位版本的 cmd.exe,然后使用“/c cluster.exe”运行它,这将在 system32 下启动 64 位 cluster.exe。(复制 cluster.exe 将无法正常工作,因为它找不到群集缓存。)但是,这仅适用于手动解决方法,而不是适用于所有用户的解决方案。

是否有另一种方法可以使 Windows 启动 64 位 cluster.exe?

谢谢,
刺客

PS一个月前在technet 上问了
一个类似的问题,但没有得到真正的答案。

0 投票
5 回答
11175 浏览

c++ - 如何在 Win x64 中的 32 位和 64 位应用程序之间共享 HWND?

MSDN 告诉我,在进程间通信(MSDN)中,窗口句柄 (HWND) 可以在 32 位和 64 位应用程序之间共享。但是,在 Win32 中,HWND 是 32 位,而在 64 位 Windows 中,它是 64 位。那么如何共享句柄呢?

我猜同样的问题也适用于命名对象的句柄,例如互斥锁、信号量和文件句柄。

0 投票
2 回答
1249 浏览

c# - 将设置写入注册表,由 x64 和 x86 应用程序共享(绕过注册表重定向)

我想在注册表中编写应用程序设置,这些设置由在 Windows 7 x64 上运行的 x86 和 x64 应用程序共享。

最佳做法是将它们保存在 HKEY_LOCAL_MACHINE\Software\Company\Product 中,但在 WOW64 中会被重定向。

我可以将它们写在 HKEY_LOCAL_MACHINE\System.. 中吗?或者系统是为其他事情保留的?

0 投票
1 回答
665 浏览

winapi - 如何防止我的 Win32 进程在 WOW64 上启动?

我有一个 Win32 进程,它在 32 位 (x86) 和 64 位 (x64) 变体中编译和打包。我希望 x86 变体拒绝在 64 位版本的 Windows(即 WOW64)上运行。

有没有办法通过设置链接器标志来做到这一点?如果没有,我需要做什么?

0 投票
4 回答
75350 浏览

c# - 读取注册表和 Wow6432Node 键

我有一些代码可以读取注册表并在其中查找值,HKEY_LOCAL_MACHINE\Software\App\但是在 64 位版本的 Windows 上运行时,该值低于HKEY_LOCAL_MACHINE\Software\Wow6432Node\App\.

我应该如何最好地解决这个问题?我需要 64 位安装程序还是应该重写我的代码来检测这两个地方?