呃,如何使 .NET 程序,在 64位 系统 中,以 32位 模式运行。
2015-12-03 23:26
471 查看
其实最简单的方法就是在解决方案中,把平台设为 x86 就好了哈~
但是今天遇到一个第三方的软件,它调用的一个 dll 是 32位 的,可能它没有测试过在 64位 系统下运行的情况,它在编译时是按默认的配置设为了 Any CPU。
但是在 64位 系统中以默认 64位 模式运行时,再调用 32位 的 dll 就报异常了。。。
于是想到的一个办法就是让它在 64位 系统中,以 32位 模式运行就好了~
在网上搜了一下,没想到 .NET 本身就提供了这个修改工具,叫做 CorFlags.exe 。
MSDN 文档:https://msdn.microsoft.com/zh-cn/library/ms164699(v=vs.110).aspx
此工具一般会随 Visual Studio 一同安装(其实是 .NET SDK 的一部分)。
1、所以打开开始菜单中的“VS 开发人员命令提示”工具:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201512/6fe13e285462d985ac8fc87974648f45.png)
2、直接输入 corflags 即可使用该工具(可以看到相关帮助内容):
![](https://oscdn.geek-share.com/Uploads/Images/Content/201512/f5550fb08aaa3156cf0ec19a70dfe244.png)
3、首先是使用 corflags 程序集文件名 命令,不加任何参数,可以利用该工具查看 .NET 程序的相关信息:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201512/c12ae3f4dec38e47544ce7d13df4ad8c.png)
好像主要是看 PE 那里是 PE32,然后 32BIT[REQ] 是 0,这个好像就代表了当前是 Any CPU 的状态。
4、然后可以使用 corflags 程序集文件名 /32BIT+ 命令,主要是添加了 /32BIT+ 参数,可以设置将该程序以 32位模式运行:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201512/8610b5895e4ab60bd5ab44256f6e7a46.png)
没有任何错误提示应该就是成功了~
5、可以用第3步的命令再检查一下设置的结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201512/b1563aa249a0a070fca24fb92f671e4f.png)
是吧,变化了~
这时候再运行此程序就是以 32位 模式运行了,再加载 32位 的 dll 文件也不会出错啦~
好样的。。。
好像没什么大用是吗。。。
但是今天遇到一个第三方的软件,它调用的一个 dll 是 32位 的,可能它没有测试过在 64位 系统下运行的情况,它在编译时是按默认的配置设为了 Any CPU。
但是在 64位 系统中以默认 64位 模式运行时,再调用 32位 的 dll 就报异常了。。。
于是想到的一个办法就是让它在 64位 系统中,以 32位 模式运行就好了~
在网上搜了一下,没想到 .NET 本身就提供了这个修改工具,叫做 CorFlags.exe 。
MSDN 文档:https://msdn.microsoft.com/zh-cn/library/ms164699(v=vs.110).aspx
此工具一般会随 Visual Studio 一同安装(其实是 .NET SDK 的一部分)。
1、所以打开开始菜单中的“VS 开发人员命令提示”工具:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201512/6fe13e285462d985ac8fc87974648f45.png)
2、直接输入 corflags 即可使用该工具(可以看到相关帮助内容):
![](https://oscdn.geek-share.com/Uploads/Images/Content/201512/f5550fb08aaa3156cf0ec19a70dfe244.png)
3、首先是使用 corflags 程序集文件名 命令,不加任何参数,可以利用该工具查看 .NET 程序的相关信息:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201512/c12ae3f4dec38e47544ce7d13df4ad8c.png)
好像主要是看 PE 那里是 PE32,然后 32BIT[REQ] 是 0,这个好像就代表了当前是 Any CPU 的状态。
4、然后可以使用 corflags 程序集文件名 /32BIT+ 命令,主要是添加了 /32BIT+ 参数,可以设置将该程序以 32位模式运行:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201512/8610b5895e4ab60bd5ab44256f6e7a46.png)
没有任何错误提示应该就是成功了~
5、可以用第3步的命令再检查一下设置的结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201512/b1563aa249a0a070fca24fb92f671e4f.png)
是吧,变化了~
这时候再运行此程序就是以 32位 模式运行了,再加载 32位 的 dll 文件也不会出错啦~
好样的。。。
好像没什么大用是吗。。。
相关文章推荐
- 一些疑难问题解决方法
- OAuth在WebApi
- JavaScript闭包初探
- JavaScript基础笔记一
- 第一篇博客
- QT链接mysql驱动程序出现的问题详解
- Java 8.0 的新特性——default()方法介绍
- 利用微信机器人,自动发送验证码
- 支付宝接口接入方法 步骤十分详细
- lightoj1380 Teleport
- 第二个spring冲刺第10天(及第二阶段总结)
- perl 学习杂项笔记
- Linux 了解 RPM
- Telnet自动登录网络设备
- MDIO/MDC接口
- equals()与hashCode()方法协作约定
- 基于Bootstrap jQuery.validate Form表单验证实践
- poj1733Parity game
- iOS UI基础-17.0 UILable之NSMutableAttributedString
- 二叉树遍历