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位应用中并不能使用它。
本人用的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位应用中并不能使用它。
相关文章推荐
- Win7 64位操作系统下CreateProcess函数运行System32文件夹下批处理文件出错的原因
- Win7 64位系统下将可执行文件oflash.exe 复制到system32文件夹下出错的原因
- Createprocess 函数运行出错的原因和解决办法
- win7 64位操作系统下git的安装 显示文件版本和正在运行的windows版本不一致
- win7 64位“不是内部命令和外部命令,也不是可运行的程序和批处理文件”错误的解决办法。
- win7操作系统上,批处理文件,直接双击的时候,能运行起来。但是以管理员身份运行的时候,都闪退。请问,这是怎么回事?
- 虚拟机安装Debian7 后无法使用共享文件夹,提示:无法更新运行时文件夹共享状态: 在客户机操作系统内装载共享文件夹文件系统时出错。
- 无法更新运行时文件夹共享状态:在客户机操作系统内装载共享文件夹文件系统时出错--解决办法
- 2012.04.03 WIN7:'telnet' 不是内部或外部命令,也不是可运行的程序或批处理文件。
- SVN 不是有内部或外部命令,也不是可运行的程序或批处理文件。 Win 7-64位
- 【已解决】安装Scrapy过程中出错:ERROR: ‘xslt-config’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
- 困惑了一上午的问题: Win7 64位操作系统的 System32 目录Redirector
- SVN 不是有内部或外部命令,也不是可运行的程序或批处理文件。 Win 7-64位
- 关于在64位win7下运行Virtualbox安装系统时出错(提示VBoxDD.DLL错误)的解决
- DOS窗口输入javac命令,返回“不是内部或外部命令,也不是可运行的程序 或批处理文件。”分析原因
- win7里边使用telnet命令为什么提示telnet不是内部或外部命令,也不是可运行的程序或批处理文件?
- win7 64位 system32和syswow64文件夹
- win7里边使用telnet提示'telnet' 不是内部或外部命令,也不是可运行的程序或批处理文件。
- 根据不同的操作系统(64/32),设置文件以64位运行。又可解决问题:“试图加载不正确的程序”。
- Win7操作系统上VMware运行移动硬盘上的虚拟机文件访问权限设定