我现在要用::WinExec()执行一个CommandLine,该函数在windows98下面执行没有问题,能够调用别一个程序,并执行。可是在windows2000下面用时就不行,得到一个值是33,请问这是为什么?

解决方案 »

  1.   

    WinExec("aaa.exe", SW_SHOWDEFAULT);
      

  2.   

    使用WinExec命令
    ⑴ 函数原型:
    UINT Win Exec(LPCSTR lpCmdLine, UINT uCmdShow);
    ⑵ 参数:
    lpCmdLine:指向一个空结束的字符串,串中包含将要执行的应用程序的命令行(文件名加上可选参数)。
    uCmdShow:定义Windows应用程序的窗口如何显示,并为CreateProcess函数提供STARTUPINFO参数的wShowWindow成员的值。
    ⑶ 返回值:
    若函数调用成功,则返回值大于31。若函数调用失败,则返回值为下列之一:
    ① 0:系统内存或资源已耗尽。
    ② ERROR_BAD_FORMAT:EXE文件无效(非Win32.EXE或.EXE影像错误)。
    ③ ERROR_FILE_NOT_FOUND:指定的文件未找到。
    ④ ERROR_PATH_NOT_FOUND:指定的路径未找到。
    虽然Microsoft认为WinExec已过时,但是在许多时候,简单的WinExec函数仍是运行新程序的最好方式。简单地传送作为第一个参数的命令行,还需要决定如何显示程序(该程序也许会忽视它)的第二个参数。通常,将其设置为SW_SHOW,也可尝试SW_MINIMIZED或SW_MAXIMIZED。WinExec不允许用CreateProcess获得的所有选项,而它的确简单。
      

  3.   

    #include <windows.h>
    #include <iostream.h>
    void main(int argc,char *argv[])
    {
    cout<<”Opening with WinExec\n”;
    if (WinExec(“notepad readme.txt”,SH_SHOW)<32)
    MessagBox(NULL,”Can’t WinExec”,NULL,MB_OK);
    cout<<”Press Enter\n”;
    MessagBox(NULL,”Press OK to continue”,”Progrm Launched”,MB_OK);
    cout<<”Opening with ShellExecute\n”;
    if (ShellExecute (NULL,”open”,
    ”readme.txt”,NULL,NULL,SW_SHOW)<(HANDLE) 32)
    MessagBox(NULL,”Can’t ShellExecute\n”,NULL,MB_OK);
    }
      

  4.   

    直接在windows2000的command里输入这里的commandline又能够正常运行,这是为什么?
      

  5.   

    Note  This function is provided only for compatibility with 16-bit Windows. Win32-based applications should use the CreateProcess function. 
      

  6.   

    谢谢大家的帮忙!我现在已经会用CreateProcess,现在我遇到一个问题是:我如何才能知道我用CreateProcess调用的那个程序已经执行完毕呢?因为我想在知道这个程序执行完毕后将Log文件用Notepad打开。
      

  7.   

    使用WriteForSingleObject,如下:STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    // Create process
    if( !CreateProcess(
             NULL,   // No module name (use command line). 
             (LPTSTR)lpszCmd,  // Command line. 
    NULL,             // Process handle not inheritable. 
    NULL,             // Thread handle not inheritable. 
    FALSE,            // Set handle inheritance to FALSE. 
    dwCreationFlags,  // 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.
             ) 
    {
            return 0;
    }

    // Wait for end of process
    WaitForSingleObject( pi.hProcess, INFINITE );

    // Close handle
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );