64位Windows上的32位应用程序“无法找到运行该应用程序的运行时版本”

问题描述:

我正在开发一个32位WinForm应用程序(目标:.NET 3.5)。我的客户坚持要求将该应用程序安装到“Windows \ System32 \ clientname”文件夹中,并在启动时自动启动。此外,应用程序必须是32位,所以我不能使用“任何CPU”。64位Windows上的32位应用程序“无法找到运行该应用程序的运行时版本”

我正在使用VS2010在Win7 x64下开发,并安装了所有版本的.NET。当我启动应用程序时,我收到消息“无法找到运行该应用程序的运行时版本”。 在Win7 x86上,它没有问题。这不是应用程序本身,我100%确定安装了所有必需的框架。

我知道在x64系统上这个文件夹不能用于32位应用程序,但正如我所说:客户端坚持并且不会让步。

在我明确告诉客户不能完成之前,我想探索所有选项。我搜索了当然,也搜查这个好网站,但没有任何帮助我的特殊情况出现了。

我的应用程序生成位于同一文件夹中的另一个32位进程。当然,在x64上也没有工作,但我通过使用“Wow64DisableWow64FsRedirection”解决了这个问题,然后将它复制到另一个位置以便从那里启动它(工作正常)。 我已经完成了我的作业,但是我找不到在x64和该特定文件夹下启动主应用程序的解决方案。

有没有?

+0

为什么你不能使用任何CPU?我敢打赌,这是64位系统的问题,它根本不会损害在32位系统上的运行。 – antlersoft 2011-12-14 22:53:20

+0

客户是否有理由希望在那里?不想听起来光​​顾我假设你已经向他解释C:\ Windows是针对Windows的,而不是针对应用程序的。 – 2011-12-14 22:53:33

在试图解决这个问题,我创建了Win7的X64机器上的两个文件夹:

  • C:\Windows\System32\ClientName;和
  • C:\Windows\SysWOW64\ClientName

接下来,我创建了一个简单的x86 WinForms应用程序针对.NET 3.5。我发现如果我将可执行文件复制到C:\Windows\System32\ClientName,我得到的报告与您报告的完全相同。

但是,如果我将可执行文件复制到两个目录,那么我可以从C:\Windows\System32\ClientName开始,它工作得很好。

我没有试过这个,但我怀疑如果你有一个多装配应用程序,你只需要将*.exe文件复制到C:\Windows\System32\ClientName。所有其他文件(和EXE)将驻留在C:\Windows\SysWOW64\ClientName目录中。

我知道这是一个不整洁的解决方案,但客户的要求再一次有点不同寻常。