winexec就是这样的,在win32下,一般都是用WaitForSingleObject来等待进程结束,但是在c#中,我不知道怎么做。也许,直接调用这个方法,也可以吧?

解决方案 »

  1.   

    我的代码片断(一个安装程序中用的),用bcb3做的,但是你应该可以看明白。void __fastcall TMainForm::SetupIIS(void)
    {
        logtext = "配置Internet Information Server(IIS)";
        WriteLog();
        labelSetupIIS->Font->Style = labelSetupIIS->Font->Style<<fsBold;    STARTUPINFO sinfo;
        PROCESS_INFORMATION pinfo;
        AnsiString parm = " " + editVdirName->Text + " " + editFolderName->Text;    sinfo.cb = sizeof(STARTUPINFO);
        sinfo.lpReserved = NULL;
        sinfo.lpDesktop = NULL;
        sinfo.lpTitle = "";
        sinfo.dwFlags = STARTF_USESHOWWINDOW;
        sinfo.wShowWindow = SW_HIDE;
        sinfo.cbReserved2 = 0;
        sinfo.lpReserved2 = NULL;    //必须要有路径!否则失败!
        logtext = "创建进程,调用"+GetCurrentDir()+AnsiString("\\adsi.exe   参数:")+parm;
        WriteLog();
        bool iis = ::CreateProcess(AnsiString(GetCurrentDir()+"\\adsi.exe").c_str(),parm.c_str(),NULL,NULL,true,NORMAL_PRIORITY_CLASS|CREATE_DEFAULT_ERROR_MODE,NULL,NULL,&sinfo,&pinfo);
        if(iis){
        logtext = "IIS配置完成";
        }
        else{
         logtext = "IIS配置失败。错误代码:"+IntToStr(GetLastError());
        }
    WriteLog();    ::WaitForSingleObject(pinfo.hProcess,INFINITE);
        ::CloseHandle(pinfo.hProcess);    labelSetupIIS->Font->Style = labelSetupIIS->Font->Style>>fsBold;
        imageSetupIIS->Visible = true;
        imageSetupIIS->Repaint();
    }
      

  2.   

    谢谢,虽然我最终没有用WaitForSingleObject解决问题,但是你给了我很大启发,给分。
      

  3.   

    呵呵,C#中,你怎么做的?哈!整理一下faq吧!