您应该始终避免使用system()
,因为
- 资源繁重
- 它破坏了安全性——你不知道这是一个有效的命令,或者在每个系统上都做同样的事情,你甚至可以启动你不打算启动的程序。
危险在于,当您直接执行程序时,它会获得与您的程序相同的权限——这意味着,例如,如果您以系统管理员身份运行,那么您刚刚无意中执行的恶意程序也会以系统管理员身份运行。如果这不会吓到您,请检查您的脉搏。
- 防病毒程序讨厌它,您的程序可能会被标记为病毒。
您应该使用CreateProcess()。
您可以使用 Createprocess() 来启动一个 .exe 并为其创建一个新进程。该应用程序将独立于调用应用程序运行。
这是我在一个项目中使用的示例:
#include <windows.h>
VOID startup(LPCTSTR lpApplicationName)
{
// additional information
STARTUPINFO si;
PROCESS_INFORMATION pi;
// set the size of the structures
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
// start the program up
CreateProcess( lpApplicationName, // the path
argv[1], // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi // Pointer to PROCESS_INFORMATION structure (removed extra parentheses)
);
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
编辑:您得到的错误是因为您需要指定 .exe 文件的路径而不仅仅是名称。Openfile.exe 可能不存在。