win7下winexec出来的cmd.exe疑难

蒙飞鸿 2015-03-16 10:30:08
WIN7 64位,使用WINEXEC("CMD.EXE",SW_SHOW);打开的命令行窗口,里面输入BCDEDIT会提示找不到改命令,即便使用全路径或者进入c:\windows\system32下运行BCDEDIT也不行。而手动打开的命令行窗口却没有这个问题!
...全文
782 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
浪子家园 2017-11-16
  • 打赏
  • 举报
回复
同样的,像记事本等之类的程序同样有两份,一份是32位程序一份是64位程序,很简单的实验方法就是用cmd命令转到system32中去start notepad.exe,用任务管理器看看是64位进程,再转到syswowo64去start notepad.exe,再用任务管理器查看,会发现后运行的记事本是32位进程,在进程中会标记 *32,表示是32位进程。没分了,希望楼主采纳后给分。谢谢!
浪子家园 2017-11-16
  • 打赏
  • 举报
回复
Win7 64位系统中,你用cmd.exe运行的时候,默认是运行的Windows\System32中的命令,而采用编程的方式的时候,如果你编译出来的是64位程序,用Winexec,shellexecute,CreateProcess,CreateProcessInternal等创建进程等函数调用的命令也是Windows\System32中的命令,若是你编译出来的是32位程序调用这些API的时候就有区别了,默认调用的都会是Windows\SysWOW64中的命令,也就是说实际上调用的已经是32位平台的命令了,同时你会发现NTDLL.DLL,USER32.DLL,SHELL32.DLL,KERNEL32.DLL等动态链接库,在System32和SysWOW64文件夹中都各自有一份大小不同的文件,就是因为64位操作系统同时支持运行32位和64位进程的原因。希望能帮到你!
oyljerry 2015-03-17
  • 打赏
  • 举报
回复
用ShellExecute,然后把BCDEDIT作为cmd的命令行参数
赵4老师 2015-03-17
  • 打赏
  • 举报
回复
WinExec("c:\\windows\\syswow64\\CMD.EXE",SW_SHOW); 试试看。
蒙飞鸿 2015-03-17
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
用ShellExecute,然后把BCDEDIT作为cmd的命令行参数
也一样的,用这个Wow64DisableWow64FsRedirection解决了

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧