请问如何在程序中调用外部的可执行程序

解决方案 »

  1.   

    WinExec
    ShellExecute
    CreateProcess
      

  2.   

    so many ways :system
    WinExec
    ShellExecute
    CreateProcess
      

  3.   

    and ShellExecuteEx
    最简单的WinExec
      

  4.   

    方法一:
    WinExec("notepad.exe,SW_SHOW");
    方法二:
    ShellExecute(NULL,"open","notepad.exe",NULL,NULL,SW_SHOWMAXIMIZED)
    方法三:
    STARTUPINFO si;
    ::ZeroMemory(&si,sizeof(STARTUPINFO));
    si.cb=sizeof(STARTUPINFO);
    PROCESS_INFORMATION pi;if(::CreateProcess(NULL,_T("notepad.exe"),NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi))
    {
        ::CloseHandle(pi.hThread);
        ::WaitForSingleObject(pi.hProcess);
    }
      

  5.   

    我的程序都是执行WINDOWS自带的记事本程序,其实还有很多其他方法
      

  6.   

    CreateProcess、CreateProcessAsUser、CreateProcessWithLogonW 
    安全性评价
    第一个参数 lpApplicationName 可以为 NULL。在这种情况下,可执行程序的名称必须是 lpCommandLine 中第一个用空格分隔的字符串。但是,如果可执行程序的名称或路径名中有空格,则存在一定的风险,因为如果空格处理不当,就可能会运行恶意的可执行程序。以下示例是危险的,因为该进程将试图运行“Program.exe”(如果该程序存在),而不是“foo.exe”。CreateProcess(NULL, "C:\Program Files\foo", ...) 如果恶意用户要在系统中创建名为“Program.exe”的特洛伊程序,那么任何使用“Program Files”目录不正确地调用 CreateProcess 的程序都将启动特洛伊程序,而不是要调用的应用程序。注意不要为 lpApplicationName 传递 NULL,以避免函数根据其运行时参数来分析并确定可执行文件路径名。否则,如果 lpApplicationName 为 NULL,则用引号将 lpCommandLine 中的可执行路径引起,如下例所示。CreateProcess(NULL, "\"C:\Program Files\foo.exe\" -L -S", ...) WinExec
    安全性评价
    可执行名称被视为 lpCmdLine 中的第一个用空格分隔的字符串。 但是,如果可执行程序的名称或路径名中有空格,则存在一定的风险,因为如果空格处理不当,就可能会运行恶意的可执行程序。以下示例是危险的,因为该进程将试图运行“Program.exe”(如果该程序存在),而不是“foo.exe”。WinExec("C:\Program Files\foo", ...) 
    如果恶意用户要在系统中创建名为“Program.exe”的特洛伊程序,那么任何使用“Program Files”目录不正确地调用 WinExec 的程序都将启动特洛伊程序,而不是要调用的应用程序。就安全性而言,我们强烈建议您使用 CreateProcess 而不是 WinExec。但是,如果您由于遗留问题而必须使用 WinExec,则务必要将应用程序名用引号引起来,如下例所示:WinExec("\"C:\Program Files\foo.exe\" -L -S", ...) 
      

  7.   

    system
    WinExec
    ShellExecute
    CreateProcess