64位操作系统,32位应用程序

时间:2011-11-15 19:07:51

标签: c# windows windows-7

我创建了一个运行在32位操作系统上的应用程序,但我尝试过的每个64位操作系统似乎都不起作用。

我正在创建一个应用程序,允许您更改Windows 7中登录屏幕的背景图像。为了实现这一点,我的应用程序需要在System32目录中创建一个文件夹,而在64位操作系统上它似乎没有想要创造它。我没有收到错误,也没有抛出异常。它似乎没有创建文件夹。

64位操作系统有一个不同的System32文件夹'Windows \ SysWOW64 \',所以我应该写信给它吗?我对64位操作系统正在做的事情感到有点困惑,如果有人能够清理它并指出我正确的方向,那就太棒了。

提前致谢!

制作目录的代码:

path = DriveLabel += @"Windows\System32\Oobe\info\backgrounds\";

if (!Directory.Exists(path))
{
     Directory.CreateDirectory(path);
}

2 个答案:

答案 0 :(得分:2)

在64位操作系统上,system32目录用于64位进程,SysWOW64目录用于32位进程。再读一遍这句话,因为它反直觉!

File System Redirector确保尝试访问system32的进程被重定向到相应的目录。

如果您的进程是32位,那么当它写入system32时,重定向器会导致在SysWOW64下创建文件/目录。

更新1 显然,UAC已被禁用。在这种情况下,从32位进程写入system32将在SysWOW64下生成输出。您应该只在清单中添加requireAdministrator选项,而不是检查是否禁用了UAC。

更新2 在评论中,您声明要更改登录屏幕的背景。为此,您需要使用本机64位目录,因为Explorer是64位操作系统上的64位进程。您可以通过多种方式实现这一目标:

  1. 目标AnyCPU,以便您在64位操作系统下以64位进程运行。这是最简单的方法。
  2. 如果您发现自己在64位操作系统上运行,请写入\ Windows \ sysnative。这是一个32位进程的偷偷摸摸的方式来命名其他不可说的64位system32文件夹。
  3. 禁用文件系统重定向器(不是真的推荐)。

答案 1 :(得分:1)

现在已经提供了更多详细信息David Heffernan's 2nd update是正确的解决方案。我将在这里留下这个答案给其他人找到这个类似问题的页面,但他的建议是你需要为这个特殊情况做些什么。


原始答案:

64位Windows操作系统上的system32文件夹仅适用于64位dll和可执行文件,sysWOW64适用于32位版本。这样做是为了让程序不会破坏,期望获得32位dll并最终得到64位dll。 Windows检测到32位程序正在尝试写入或读取System32文件夹并将其重定向到新文件夹。继续按原样使用它,请注意,如果有人在资源管理器中导航,他们需要转到SysWOW64文件夹来访问您的文件。 Here is a MSDN page继续在64位窗口上编写32位应用程序。要查看的关键部分是File System RedirectorRegistry Redirector

如果您正在使用现代操作系统,还应该注意文件和注册表项的其他一些自动重定向。发生这种情况的原因是人们在假设他们具有管理员权限的情况下编写应用程序已经很长时间了,微软不希望在使用vista和win 7的帐户权限破解鞭子时破坏所有内容。See this blog post.

还要把David Heffernan的观点带回家。我会把钱放在你试图写入System32文件夹的任何内容上都不应该去那里。请详细说明您要对该文件夹执行的操作?如果您只是想要机器本地数据,那么您应该使用Environment.GetFolderPath

string pathToMyDataFolder = Environment.GetFolderPath(Path.Combine(Environment.SpecialFolder.CommonApplicationData, MyAppFolderName));