【发布时间】:2011-12-19 08:58:49
【问题描述】:
我正在开发一个 32 位 WinForm 应用程序(目标:.NET 3.5)。我的客户坚持将应用程序安装到“Windows\System32\clientname”文件夹并在启动时自动启动。另外,应用必须是 32 位的,所以我不能使用“任何 CPU”。
我正在使用 VS2010 在 Win7 x64 下进行开发,并且安装了所有版本的 .NET。当我启动应用程序时,我收到消息“无法找到运行此应用程序的运行时版本”。 在 Win7 x86 上它可以正常工作。这不是应用程序本身,我 100% 确定安装了所有必需的框架。
我知道在 x64 系统上,此文件夹不适用于 32 位应用程序,但正如我所说:客户坚持,不会让步。
在我明确告诉客户无法完成之前,我想探索所有选项。当然,我用谷歌搜索并搜索了这个不错的网站,但没有发现对我的特殊情况有帮助。
我的应用在同一文件夹中生成了另一个 32 位进程。当然,在 x64 上也不起作用,但我通过使用“Wow64DisableWow64FsRedirection”解决了这个问题,然后将其复制到另一个位置以从那里启动它(效果很好)。 我已经完成了我的作业,但是我找不到在 x64 下和那个特定文件夹中启动主应用程序的解决方案。
有吗?
【问题讨论】:
-
为什么不能使用Any CPU?我敢打赌这就是你的 64 位系统的问题,而且在 32 位系统上运行完全不会有任何危害。
-
客户有理由想要它吗?不想听起来傲慢,我假设您已经向他解释了 C:\Windows 是用于 Windows,而不是用于应用程序。
-
我不会担心听起来光顾@AndrewCooper。我敢打赌,在没有听起来光顾的情况下不设法问它也是 OP 的问题! ;)
-
应用程序必须是 32 位的,因为它使用第三部分 32 位 DLL。当然,我用我有限的外交技巧教育了客户:)。所以,让我们假设所有这些条件都是不可改变的。我的问题是:可以做到(使用任何技巧)还是绝对不可能?
-
这里有一个说法可能会说服你的客户,但你的客户听起来不合理。所有应用程序都链接到系统 DLL。加载程序查找这些 DLL 的第一个位置是可执行文件所在的目录。该目录将包含无法加载到 32 位进程中的 64 位 DLL。