C# &引用;找不到运行此应用程序的运行时版本";适用于64位Windows上的32位应用程序

C# &引用;找不到运行此应用程序的运行时版本";适用于64位Windows上的32位应用程序,c#,.net,x86,64-bit,C#,.net,X86,64 Bit,我正在开发一个32位WinForm应用程序(目标:.NET 3.5)。我的客户端坚持将应用程序安装到“Windows\System32\clientname”文件夹中,并在启动时自动启动。另外,应用程序必须是32位的,所以我不能使用“任何CPU” 我正在使用VS2010在Win7 x64下开发,并且安装了所有版本的.NET。当我启动应用程序时,我收到消息“找不到运行此应用程序的运行时版本”。 在Win7 x86上,它可以正常工作。这不是应用程序本身,我100%确信所有必需的框架都已安装 我知道在

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

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

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

在我明确地告诉客户这是不可能的之前,我想探讨一下所有的选择。我当然搜索了谷歌,也搜索了这个不错的网站,但没有找到对我的特殊情况有用的东西

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


有吗?

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

  • C:\Windows\System32\ClientName
    ;及
  • C:\Windows\SysWOW64\ClientName
接下来,我创建了一个简单的针对.NET3.5的x86WinForms应用程序。我发现,如果我将可执行文件复制到
C:\Windows\System32\ClientName
中,得到的错误消息与您报告的完全相同

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

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


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

为什么您不能使用任何CPU?我敢打赌这就是64位系统的问题所在,在32位系统上运行也不会有什么坏处。客户有理由想要它吗?我不想听起来像是居高临下,我想你已经向他解释过C:\Windows是用于Windows的,不是用于应用程序的。我不会担心听起来像是居高临下的@AndrewCooper。我敢打赌,在没有表现出高人一等的态度的情况下不去问这个问题也是老年退休金计划的问题!;)应用程序必须为32位,因为它使用第三部分32位DLL。当然,我用有限的外交技巧教育了客户:)。那么,让我们假设所有这些条件都是不变的。我的问题是:这是可以做到的(使用任何技巧)还是绝对不可能?这里有一个论点可以说服你的客户,但你的客户听起来不合理。所有应用程序都链接到系统DLL。加载程序查找这些DLL的第一个位置是可执行文件所在的目录。该目录将有64位DLL,无法加载到32位进程中。这看起来是一个解决方案。这是不寻常的,但正如你所说,这是要求。谢谢你,约翰!