Riverside Learning LABO(Skill/Idea/Code)

よりよいシステムのため工学系と人間系の学習下書きメモ

CreateProcess

『実行ファイルから別の実行ファイルを起動する』メモ

■CreateProcess
// プロセスの起動
BOOL SimpleExecute(LPTSTR lpCommandLine)
{
  STARTUPINFO si ;
  PROCESS_INFORMATION pi ;

  if(CreateProcess(NULL,
   lpCommandLine, // コマンドライン文字列
   NULL,NULL,FALSE,0,NULL,NULL,&si,&pi){
   // スレッドハンドルの開放
   CloseHandle(pi.hThread) ;
   // プロセスハンドルを開放
   CloseHandle(pi.hProcess) ;
   return TRUE ;
  }
  return FALSE ;
}

// プロセスの起動(終了待ち有り)
BOOL Execute(LPTSTR lpCommandLine)
{
  STARTUPINFO si ;
  PROCESS_INFORMATION pi ;

  ZeroMemory(&si, sizeof(STARTUPINFO)) ;
  si.cb = sizeof(STARTUPINFO) ;
  si.dwFlags = STARTF_USESHOWWINDOW ;
  si.wShowWindow = SW_SHOWNORMAL ;

  if(CreateProcess(NULL,
    lpCommandLine, // コマンドライン文字列
    NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)){
    // スレッドハンドルの開放
    CloseHandle(pi.hThread) ;
    // 起動したプロセスの終了を待つ
    WaitForSingleObject(pi.hProcess, INFINITE) ;
    // プロセスハンドルを開放
    CloseHandle(pi.hProcess) ;
    return TRUE ;
  }
  return FALSE ;
}