我在VC中导入EXE后,WorkSpace中增加了一个IDR_EXE1档。现在我想在这个EXE打开的时候就让导入的IDR_EXE1也执行,不知道有什么方法。前提是不能将我要打开的EXE放在同一个目录,而要将程序打包到这我新建工程的EXE中。
我试了这样的方法,不过不行
HINSTANCE   hInst   =   AfxGetInstanceHandle();   
//   Load   the   user-defined   resource.   
HRSRC   hExeFile   =   ::FindResource(hInst,   L"ie_menu.exe", L"EXE_RESOURCE");   
HGLOBAL   hRes   =   ::LoadResource(hInst,   hExeFile);   
DWORD   dwSize   =   ::SizeofResource(hInst,   hExeFile);   
if   (hRes   !=   NULL)   
{   
UINT   FAR*   lpnRes   =   (UINT   FAR*)::LockResource(hRes);   
TRY   
{    
CFile   file(L"ie_menu.exe",   CFile::modeCreate   |   CFile::modeWrite);    
file.Write(lpnRes,   dwSize);   
file.Flush();   
}   
CATCH(CFileException,   e)   
{   
}   
END_CATCH   
::FreeResource(hRes);   
}

解决方案 »

  1.   

    你的意思是把另一个EXE文件作为资源附带在程序里面,在程序执行的时候释放出来加载是吗?
    按你的做法就可以,只是最后还要创建进程,用CreateProcess或ShellExecute等函数都可以。
      

  2.   

    要想执行exe就要带上exe,然后执行CreateProcess,要么就是把exe作为资源放到工程中,然后当二进制读取数据
      

  3.   


    楼主的意思是调用程序吗?那用ShellExecute 不是很方便吗?例如: 打开一个应用程序  ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW );
      

  4.   

    system
    WinExec
    ShellExcute
    CreateProcess
    一打开就执行,可以放到main函数入口处或者Initinstance()里
      

  5.   

    放在资源文件里是不能执行的,首先要用LoadResource打开资源,然后在磁盘上生成文件,最后再调用CreateProcess或ShellExecute等函数执行
      

  6.   

    最近也在做这样的工作,我的工程要调其它的exe达50多个,还得考虑它们之间的相互影响,头都大了。
      

  7.   

    你可以写出来写成exe文件,再调用createprocess等运行.
      

  8.   

    各位都说得不错,,昨天晚上我就把它就弄好。
    不过又来了一个新的问题,就是我在运行新的程序后。我还要检测它是否有退出。如果它有退出的话就将整个对话框销毁(线程里判断),问题是在线程里面怎么能销毁主对话框呢。DestroyWindow和PostQuitMessage肯定是无效的。原因是因为这个线程没退出。我想在线程里面去销毁自己的HAND。各位有何良策呀
      

  9.   

    把主窗口的句柄作为参数传给线程,然后线程里:给他发送WM_CLOSE 看行不?
      

  10.   

     DWORD WINAPI Fun1Proc(  LPVOID lpParameter )
    {
    HWND hWnd1 = ::FindWindow(NULL,L"DD");
    ::PostMessage(hWnd1,WM_COMMAND,WM_CLOSE,0);
    }
    这样不行呀
      

  11.   

    如果要发关闭消息,应该是::PostMessage(hWnd1,WM_CLOSE,0,0);
    另外用FindWindow容易找错窗口,最好通过线程参数来传递。