VS2012

创建进程

  • WinExec
  • ShellExecute、ShellExecuteEx
  • CreateProcess

MFC-创建进程_信息结构

void CDemoDlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知处理程序代码

    //创建一个新的进程,打开计算器
    WinExec("calc.exe", SW_SHOW);
}
void CDemoDlg::OnBnClickedButton2()
{
    // TODO: 在此添加控件通知处理程序代码

    //创建一个新的进程,打开记事本
    ShellExecute(NULL, TEXT("open"), TEXT("test.txt"), NULL, NULL, SW_SHOW);
}
void CDemoDlg::OnBnClickedButton3()
{
    // TODO: 在此添加控件通知处理程序代码

    //创建一个新的进程,打开记事本
    SHELLEXECUTEINFO Info;
    memset(&Info, 0, sizeof(Info));
    Info.cbSize = sizeof(Info);
    Info.lpVerb = TEXT("open");
    Info.lpFile = TEXT("test.txt");
    Info.lpParameters = NULL;
    Info.fMask = SEE_MASK_NOCLOSEPROCESS;
    Info.nShow = SW_SHOWDEFAULT;
    ShellExecuteEx(&Info);
}
void CDemoDlg::OnBnClickedButton4()
{
    // TODO: 在此添加控件通知处理程序代码

    //创建一个新的进程,打开一个计算器
    PROCESS_INFORMATION pi;//进程信息结构
    STARTUPINFO si;//启动信息结构
    memset(&si, 0, sizeof(si));
    si.cb = sizeof(si);
    si.wShowWindow = SW_SHOW;
    si.dwFlags = STARTF_USESHOWWINDOW;

    ::CreateProcess(TEXT("C://windows//system32//calc.exe"),
        NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);
}

Caesar卢尚宇

2021年1月4日

 

2021年6月9日 补充

传参,调用exe,等待调用结束,判断是否成功。
    char cmd[1000];
    SHELLEXECUTEINFO ShExecInfo = { 0 };
    sprintf(cmd, "%s\\SearchCloudPdfToPng.exe", DLL_Path.GetBuffer());
    ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
    ShExecInfo.hwnd = NULL;
    ShExecInfo.lpVerb = "open";//多种类别有 "explorer" "print" 等
    ShExecInfo.lpFile = cmd;//exe 路径    
    ShExecInfo.lpParameters = pdf_path;//参数
    ShExecInfo.lpDirectory = NULL;
    ShExecInfo.nShow = SW_HIDE;//
    ShExecInfo.hInstApp = NULL;
    ShellExecuteEx(&ShExecInfo);
    DWORD res = WaitForSingleObject(ShExecInfo.hProcess, 30 * 1000);//等待完成   第二个参数是超时时间(毫秒)超时后返回超时代码 
    if (res == WAIT_OBJECT_0)//表示你等待的对象(比如线程、互斥体)已的正常执行完成或完成释放
    {
        //删除pdf
        DeleteFile(pdf_path);
    }