在C++中,system()
和shellexecute()
主要有哪些区别?
在什么情况下应该使用system()
和shellexecute()
?
shellexecute
,因此它们没有区别。但是Win32函数ShellExecute
存在,但它不像system
一样是一个C++标准函数。
ShellExecute
和system
的功能不同。system
(或多或少)相当于在命令行上输入命令。而ShellExecute
相当于双击文件(或右键单击并从列表中选择“动词”)。system
控制,程序将在执行完成之前不会返回,而 ShellExecute
则不等待完成。 - Jesse GoodShellExecute
是一个非常强大的函数,它可以做很多事情。它的关键在于能够通过参数指定“动作”,告诉函数要执行什么操作。因此,把它归纳为一种特定的行为有些不准确,因为它可以被指示以各种方式运行。当然,这是它强大和实用的关键所在。编写Win32代码时,应始终优先考虑使用 ShellExecute
而不是 system
。 - Cody Graysystem
会在路径中搜索可执行文件。如果您要运行一个可执行文件,ShellExecute
必须被“告知”可执行文件的位置。虽然ShellExecute
可以运行可执行文件,但比起直接使用system
来运行它们,这种方式就不太方便了。 - Nicol BolasShellExecute(NULL, "open", "notepad.exe", NULL, NULL, SW_SHOWNORMAL);
来启动记事本。我想不起来有什么需要你指定完全限定路径到某个在你路径上的东西。 - Cody GrayShellExecute
甚至不需要告诉它可执行文件是什么,更别提它在哪里了。比如,ShellExecute(NULL, "open", "http://stackoverflow.com/", NULL, NULL, SW_SHOWNORMAL);
将会打开默认浏览器。请参阅KD837633以获取一些背景信息。 - MSalters
ShellExecute
与C++无关。 - ildjarnShellExecute
肯定是正确的解决方案。 - David HeffernanShellExecute
。仅在您绝对需要编写可在多个平台上工作的可移植代码时才使用system
。即使如此,我仍建议使用#ifdef
而非system
。 - Cody Gray