char fName[FILENAME_MAX];
    GetModuleFileName(NULL, fName, FILENAME_MAX);
    *strrchr(fName, '\\') = '\0';
*strrchr(fName, '\\') = '\0';
*strrchr(fName, '\\') = '\0';    strcat(fName, "\\CenterDemo\\Debug\\CenterDemo.exe"); ShellExecute(this->m_hWnd,"open",fName,"","", SW_SHOW );文件路径什么的都是对的,手动点击那个exe也行,为啥这个启动不起来呢?那个地方不对啊?

解决方案 »

  1.   

    ::ShellExecute(NULL,_T("Open"),fName,NULL,NULL,SW_SHOW);
    试试这样
      

  2.   

    ShellExecute(this->m_hWnd,"open",fName,NULL,NULL, SW_SHOW );
      

  3.   

    如果你的exe程序不需要传入什么参数的话,倒数第二和倒数第三个参数,不要用"",而是用NULL代替。
      

  4.   

    最后一个参数,建议使用SW_SHOWNORMAL
      

  5.   

    还是不对啊,启动后立马就消失了,那个EXE需要引入自己的dll,但是我手工去点击既可以启动啊,为什么?
      

  6.   

    怎么没人关注一下呢?这个exe启动后立马就关闭了啊?其中这个exe是需要调用其工作目录中的init.cfg文件,难道是这个原因????大神们,给点帮助呗
      

  7.   

    你调试一下看看fName的值正确?ShellExecute函数的返回值是什么?
      

  8.   


    返回值为:D:\myproject\CenterDemo\Debug\CenterDemo.exe。路径正确
    我猜测是不是用了相对路径,在工作路径改变的情况下,导致这个EXE获取不到它的cfg文件啊???
      

  9.   

    这要你的路径获取正确用这句就可以了
    ShellExecute(NULL,_T("open"),path,NULL,NULL,SW_SHOW);
      

  10.   

    应该是当前工作目录的原因,手工启动和用ShellExecute启动,它们的工作目录是不同的。