想去截获*.msi这类文件的安装,使用CreateProcess返回False,似乎返回Error是该程序不是有效的Win32程序请教如何解决,谢谢
是不是只能用ShellExecute来做?
用ShellExecute又该如何判断该进程已经结束了?

解决方案 »

  1.   

    To  goodboyws(深夜不眠者) 没错,是Windows Installer文件,但我这里除了这个MSI文件,并未其他的EXE文件了
      

  2.   

    PS:运行MSI后,临时文件夹中也是只会出现一个MSI以及一tmp文件
      

  3.   

    用ShellExecute又该如何判断该进程已经结束了?==可以用进程快照来判断
      

  4.   

    算了,自己来结贴SHELLEXECUTEINFO ShExecInfo;
    ZeroMemory(&ShExecInfo, sizeof(SHELLEXECUTEINFO));
    ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
    ShExecInfo.hwnd = NULL;
    ShExecInfo.lpVerb = NULL;
    ShExecInfo.lpFile = szFilePath;
    ShExecInfo.lpParameters = szParam;
    ShExecInfo.lpDirectory = NULL;
    ShExecInfo.nShow = SW_HIDE;
    ShExecInfo.hInstApp = NULL;
    ShellExecuteEx(&ShExecInfo);
    HWND hWnd = ::FindWindow("MsiDialogCloseClass",NULL);
    WaitForSingleObject(ShExecInfo.hProcess, INFINITE);其中szFilePath为文件全路径,szParam为该文件所带的参数