有没有办法强制“任何CPU” 编译后的应用程序可以在 64 位操作系统上以 32 位模式运行?
如果我有一个“任何 CPU”编译的 .NET 应用程序,它将在 64 位操作系统上以 64 位模式运行。
但是,如果我出于某种原因想要强制此应用程序以 32 位模式运行。 (就好像它是使用“x86”编译的)。 重新编译不是一个选项,那么这可以在运行时配置吗? 也许使用 .manifest 文件?
If I have a "Any CPU" compiled .NET app, it will run in 64bit mode on a 64bit OS.
But if I, for whatever reason, wants to force this app to run in 32bit mode. (As if it were compiled using "x86"). Recompiling is not an option, so is this possible to config at run time ? With the .manifest file perhaps?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我相信您可以使用 CorFlags.exe 来完成此
操作,例如:
CorFlags your assembly.exe /32BIT+
请注意,如果程序集是强命名的,您还必须使用 /force 选项来破坏强命名,因此您必须放弃该程序集。
I believe you can do this with CorFlags.exe
Something like:
CorFlags yourassembly.exe /32BIT+
Note that if the assembly is strong named you will also have to use the /force option which breaks the strong naming, so you'll then have to resign the assembly.
我得到了一个新的解决方案!
编写自定义 .NET 主机是解决此问题的更好方法。 由于host是本机应用程序,如果将其编译为32/64位应用程序,则它加载的程序集将在32/64位模式下运行。
无需担心托管问题,因为 .NET 构建过程提供了默认主机来运行 .NET 应用程序。 不过,在某些特殊情况下,显式托管 .NET 运行时可能会很有用。
因此,您可以准备两台主机(C++应用程序),一台构建为32位应用程序,另一台构建为64位应用程序。 并启动(exe或脚本)来调用您喜欢的模式的主机。 主机将以与主机相同的模式加载并运行您的程序集。
有一个关于托管核心 CLR 的教程:
编写自定义 .NET Core 主机来控制 .NET 运行时您的本机代码。
如果您的程序集是 .net Framework 应用程序,请参阅以正确的方式托管 CLR。
I got a new solution!
Writing a custom .NET host is a better solution for this question. Because host is native applications, if you compile it as 32/64bit app, the assembly it loads will run on 32/64bit mode.
Don't need to worry about hosting because .NET build processes provide a default host to run .NET applications. In some specialized circumstances, though, it can be useful to explicitly host the .NET runtime.
So, you can prepare two host (C++ app), one build as 32bit app, the other is 64bit. And make a launch (exe or script) that invoke the host which mode you like. The host will load and run your assembly with the same mode as the host.
There is a tutoral about Hosting Core CLR:
Write a custom .NET Core host to control the .NET runtime from your native code.
If your assembly is .net framework app, see Hosting the CLR the Right Way.