如何在Windows 10的C程序中用ShellExecute运行simple.exe?
关于使用ShellExecute运行simple.exe的可行性解答
没问题,完全可以用ShellExecute来运行你这个无参数、无返回值的simple.exe程序,不过有几个容易踩的小坑得提醒你一下:
路径转义要注意:你写的
"C:\somewhere\simple.exe"在C/C++字符串里会出问题——反斜杠\是转义字符,编译器会把\s这类序列当成特殊字符处理,导致路径解析错误。正确的写法应该是用双反斜杠\\转义,比如"C:\\somewhere\\simple.exe",或者直接用正斜杠"/"代替,写成"C:/somewhere/simple.exe",两种方式都能被Windows正确识别。调用参数要完整:
ShellExecute的完整调用需要几个必要参数,哪怕你不需要某些功能也得传对应的值。比如:// 基础的正确调用示例 ShellExecute(NULL, "open", "C:\\somewhere\\simple.exe", NULL, NULL, SW_SHOW);这里的参数分别是:
- 第一个
NULL:表示没有父窗口(不需要关联窗口的话就传这个) "open":指定操作动词,运行可执行文件用这个就行,传NULL也会默认用open- 程序路径:就是处理好转义的
simple.exe路径 - 第四个
NULL:因为你的程序不需要参数,所以传空 - 第五个
NULL:指定工作目录,传空就用当前进程的工作目录 SW_SHOW:控制程序窗口的显示方式,如果想后台运行可以换成SW_HIDE
- 第一个
可选的错误检查:虽然你不需要程序的返回值,但如果想确保
simple.exe确实启动成功,可以检查ShellExecute的返回值。返回值大于32就代表启动成功,小于等于32则是出现了错误(比如文件找不到、权限不足等)。示例代码:HINSTANCE launchResult = ShellExecute(NULL, "open", "C:\\somewhere\\simple.exe", NULL, NULL, SW_SHOW); if ((int)launchResult <= 32) { MessageBox(NULL, "Failed to start simple.exe", "Error", MB_ICONERROR); }替代方案参考:如果只是单纯运行可执行文件,不需要Shell的关联处理(比如打开文件时调用默认程序这类功能),也可以用
CreateProcess,它更底层,能更精细控制进程,但代码会复杂一些。不过对你的需求来说,ShellExecute已经完全够用了。
内容的提问来源于stack exchange,提问作者LoneWarrior ForgottenTrails
相关产品推荐
相关产品推荐

