在 64 位机器上以 32 位运行 C# 应用程序

Posted

技术标签:

【中文标题】在 64 位机器上以 32 位运行 C# 应用程序【英文标题】:Running a C# application as 32-bit on a 64-bit machine 【发布时间】:2010-10-01 00:54:50 【问题描述】:

如何强制我的应用程序在 64 位机器上以 32 位运行?

代码是用 C# 编写的。

【问题讨论】:

【参考方案1】:

右键单击您的项目,然后选择属性。

在属性中,选择构建选项卡。在平台目标下,选择 x86。

点击 Ctrl+Shift+S 保存所有文件,右键单击解决方案并选择“清理”以删除旧的二进制文件.之后的任何构建都应该是 32 位

【讨论】:

这样只能在x86上运行,不能在ARM或其他架构上运行【参考方案2】:

命令行形式:

corflags application.exe /32BIT+ 

【讨论】:

【参考方案3】:

由于ClickOnce 限制,当我们无法将现有代码从 Any CPU 更改为 x86 时,我是这样做的:

创建一个 32 位(必须在项目属性下检查 x86)“启动器”应用程序(Windows 应用程序但不是窗体):

static void Main(string[] args)

    // Load the assembly    
    string directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    string assemblyName = Path.Combine(directory, "YourAnyCPUApplication.exe");
    Assembly assembly = Assembly.LoadFile(assemblyName);
    assembly.EntryPoint.Invoke(null, null);

Any CPU项目的Main方法中添加如下代码:

if (IntPtr.Size == 4)

    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    // etc...

else

    // Launch application in 32-bit mode
    System.Diagnostics.Process.Start(Path.GetDirectoryName(Application.ExecutablePath)
                                     + @"\Your32BitApplicationLauncher.exe");

我希望这会有所帮助:-)

【讨论】:

【参考方案4】:

如果您转到 Visual Studio 中的配置管理器,您可以将平台设置为 x86 或 x64。

【讨论】:

【参考方案5】:

假设这是一个 Winforms、控制台应用程序或 Windows 服务,您必须为 x86 而不是任何 CPU 构建 exe。它在配置管理器中。

【讨论】:

【参考方案6】:

将项目设置为 x86 将阻止文件在 ARM 等非 x86 平台上执行。从 Visual Studio 11 和 .NET 框架 4.5 开始,有一个名为 Any CPU 32-bit preferred 的新选项,从那时起这是默认选项。生成的代码将在任何平台上运行,但在 64 位平台上它们作为 32 位进程运行

进一步阅读

What is the purpose of the "Prefer 32-bit" setting in Visual Studio and how does it actually work? What does the "Prefer 32-bit" compiler flag mean for Visual Studio (C#, VB)? What AnyCPU Really Means As Of .NET 4.5 and Visual Studio 11

【讨论】:

以上是关于在 64 位机器上以 32 位运行 C# 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在 64 位操作系统上以 32 位和 64 位运行 IIS 的优缺点是啥?

无法在电子应用程序中显示 Flash 内容

32 位应用程序无法在 x64 Win2003 上运行,原因是

在 32 位 Xp 计算机上构建 64 位 Qt

在“任何 CPU”.NET 程序集上强制 x86 CLR

在 32 位机器上为 64 位编译一个 c# 项目? (视觉工作室 2015)