热门关键字:   网站安全  黑客攻防  安全漏洞  系统安全  网络安全
站外
广告
域名申请虚拟主机 信息安全 域名注册 云主机 网络安全技术 企业网络安全 站外
广告
文字广告位招租 文字广告位招租 文字广告位招租 文字广告位招租 云安全

c++ system()和WinExec()的区别

发布时间:2012-07-28 18:18文章来源:网络文章作者:秩名 点击次数:
摘要:区别1. system是c库的函数 WinExec是windows函数 区别2. system有一个参数,是命令行 Winexec有两个参数,一个是命令行,一个是窗口显示 区别3. 虽然两个都是命令行,但有很大的区别 Winexec的命令行参数一般是一个外部程序的路径加给这个程序的参数,如 Win...

区别1.

system是c库的函数

WinExec是windows函数


区别2.

system有一个参数,是命令行

Winexec有两个参数,一个是命令行,一个是窗口显示


区别3.

虽然两个都是命令行,但有很大的区别

Winexec的命令行参数一般是一个外部程序的路径加给这个程序的参数,如

Winexec("D:\\notepad.exe 1.txt",WM_SHOWWINDOW);

system的命令行参数其实是给cmd程序的参数,system执行的时候是调用cmd程序,

假设system(“D:\\notepad.exe 1.txt“);程序运行时是调用cmd -c D:\notepad.exe 1.txt;

系统就会启动cmd程序,由它执行。所以system的参数就是cmd -c后所对应的参数

(cmd -c 后面应该接什么可以通过cmd /?查看),因此system可以使用"cd E:\"这样的参数,cmd会认识它,

但winexec就不认识。因为没有cd这个程序存在,其实cd只不过是cmd自定义的一个命令。


有时候用winexec和system调用同样的程序,会有不同的结果,

例:

  1. winexec("\"D:\\program files\\notaped.exe\" \"D:\\my document\\1.txt\"",WM_SHOWWINDOW);   
  2.  
  3. system("\"D:\\program files\\notaped.exe\" \"D:\\my document\\1.txt\"",);   


看起来两个一样,但运行不一样

winexec可以正常运行,但system会报错,说找不到路径什么的或参数错误。

为什么呢?因为system的参数给cmd,cmd会用自己的方法解析参数(cmd帮助里有说明),

cmd 当碰到一对双引号时,它会把双引号里面的东西提取出来,当有多对双引号时,

它就会用其他方法来解析(老实说我也没看懂它的帮助里关于多对双引号解析的逻辑,如果你看懂了,麻烦告诉我一声)。

那么怎么解决上面的问题呢,很简单,在所有参数外面再包一对双引号

  1. system("\"\"D:\\program files\\notaped.exe\" \"D:\\my document\\1.txt\"\"",);   
  2.  

这样cmd只会去除首尾的双引号,不做其他解析


4.

winExec是不同步的进程调用,就是调用起来了就返回了,不会等调用起来的程序结束

system是同步调用进程,调用进程不结束,它就不返回,它可以获取调用进程所返回的值

 

标签分类: C++

上一篇:C# 枚举类型转换字符串 Enum to string
下一篇:C++设置文件属性隐藏文件