如果用这种方式调用,程序没有反应
ShellExecute(NULL, TEXT("open"), TEXT("help.chm"), NULL, NULL, SW_SHOWNORMAL);如果用这种方式调用,程序提示不能打开help.chm文件
ShellExecute(NULL, TEXT("open"), TEXT("hh.exe"), TEXT("help.chm"), TEXT(".\\"), SW_SHOWNORMAL);help.chm和程序在同一个目录中
什么原因呢?

解决方案 »

  1.   

    用绝对路径ShellExecute(NULL,L"open", L"D:\\help.chm",NULL,NULL,SW_SHOW);
      

  2.   

    是路径问题,解决办法:
    1、使用绝对路径。
    2、分清楚工作目录exe所在目录
    当在vc Ide环境中运行程序,相对路径是以工作目录为基准。
    当在资源管理器中运行程序,相对路径是以exe所在目录为基准。

    二者并不相同。ShellExecute(NULL, TEXT("open"), TEXT("hh.exe"), TEXT("help.chm"), TEXT(".\\"), SW_SHOWNORMAL);
    这个写法中的相对路径是以exe所在目录为基准,必须直接在资源管理器中运行exe程序,而不是在vc Ide环境中运行。
    楼主可以尝试验证。至于如何在vc ide环境中取得exe所在目录,可参考如下示例:
    #include <string>
    #include <shellapi.h>
    #include <windows.h>
    using namespace std;int main(int argc, char **argv)
    {
        char fn[256];
        GetModuleFileNameA(NULL,fn,256);
        string str(fn);
        str=str.substr(0,str.find_last_of('\\'));
        str+="\\CppReference.chm";//请自行修改
        ShellExecuteA(NULL, "open", str.c_str(),NULL,NULL,SW_SHOWNORMAL); 
        return 0;
    }
      

  3.   

    补充一下,如果想在vc ide环境中成功运行,要注意此时的相对路径是从.cpp文件所在目录开始。代码应该如下
    ShellExecute(NULL, TEXT("open"), TEXT("hh.exe"), TEXT("help.chm"), TEXT(".\\Debug\\"), SW_SHOWNORMAL);
      

  4.   

    谢谢 fight_in_dl,因为结贴早,没能给你积分了。