您的位置:首页 > 其它

Win7 64位操作系统下CreateProcess函数运行System32文件夹下批处理文件出错的原因

2015-05-18 20:01 429 查看
我调用win7自带的定位程序:c:/windows/system32/tabcal.exe;
本人用的64位系统。 

在DOS和使用批处理都能正确打开程序,但在QT程序中一直打不开。

初始以为是必须得使用管理员权限,最后使用以下方法解决。

网上收到的解决方法(摘至:http://blog.csdn.net/csyounth/article/details/7847492):

在Windows7 64位操作系统下,VisualStudio编译32位应用,调用CreateProcess运行System32文件夹下批处理文件会失败,GetLastError返回值是2。查询Error Lookup返回信息:系统找不到指定文件。

其原因在于64为操作系统对于32位程序调用System32下文件的处理方式[1]。对于64位操作系统来说,C:\Windows\System32文件夹不再是系统文件夹,而是为64位操作系统预留的。当同名的64位和32位DLL同时存在于一个系统之中时,system32用于存储32位DLL,并且这些DLL是为64位应用调用的。因为file system redirector机制的存在,SysWOW64透明化了不同位文件的调用。

如果一个32位应用程序需要调用System32下的文件,最好改用Sysnative这个System32的别名,否则将调用失败。实际上,并不存在Sysnative这个文件夹,这只是Windows为32位应用开发者提供的一种便利,64位应用中并不能使用它。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐