常に使用を避ける必要がありますsystem()
。
- リソースが重い
- それはセキュリティを無効にします -- あなたはそれが有効なコマンドであるか、どのシステムでも同じことを行うかを知りません。起動するつもりのないプログラムを起動することさえできます。
危険なのは、プログラムを直接実行すると、そのプログラムが自分のプログラムと同じ権限を取得することです。つまり、たとえば、システム管理者として実行している場合、うっかり実行してしまった悪意のあるプログラムもシステム管理者として実行されてしまうということです。それでも怖くない場合は、脈拍をチェックしてください。
- ウイルス対策プログラムはそれを嫌います。プログラムがウイルスとしてフラグを立てられる可能性があります。
CreateProcess()を使用する必要があります。
Createprocess() を使用して、.exe を起動し、新しいプロセスを作成することができます。アプリケーションは、呼び出し元のアプリケーションから独立して実行されます。
私のプロジェクトの1つで使用した例を次に示します。
#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 );
}
EDIT:あなたが得ているエラーは、名前だけでなく.exeファイルのパスを指定する必要があるためです。Openfile.exe が存在しない可能性があります。