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

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

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

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

在我明确告诉客户无法完成之前,我想探索所有选项。 我当然用Google搜索并搜索了这个好网站,但没有对我的特殊情况有所帮助。

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

有吗?

为了解决这个问题,我在Win7 x64机器上创建了两个文件夹:

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

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

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

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

我知道,这是一个不整齐的解决方案,但是再一次,客户的要求从一开始就有点不寻常。