大家好啊,我的软件做成安装包后,用桌面的快捷方式打不开软件,提示找不到数据库文件数据库是ACCESS。到软件的安装目录下直接运行执行文件,就可以。
  我在DELPHI里也碰到这问题,不过delphi可以用SetCurrentDir函数来设置当前活动目录后,就可以了。  请问,VC用什么办法解决这问题呢?我总不能每次都到安装目录下找执行文件啊。是不是使用SetCurrentDirectory(),怎么用?用在那个地方就可以啊? 好心人帮帮忙,很着急啊。

解决方案 »

  1.   

    在App::InitInstance()加入如下代码:#include "direct.h"TCHAR szPath[_MAX_PATH];
    memset(szPath, 0, sizeof(szPath));
    GetModuleFileName(NULL, szPath, _MAX_PATH);
    char* p = strrchr(szPath, '\\');
    if(p != NULL)
    *(p+1) = '\0';
    _chdir(szPath);
    CString strWorkPath = szPath;
    CString strProfile = strWorkPath + m_pszProfileName;
    m_pszProfileName = _tcsdup(strProfile);
      

  2.   

    CString strProfile = strWorkPath + m_pszProfileName;
    m_pszProfileName = _tcsdup(strProfile);
    这两句怎么理解啊?这样就可以了啊?那用不用SetCurrentDirectory?
    谢谢回答啊,希望能让我解决问题,100分将全部给你啊,再一次感谢你。
      

  3.   

    桌面的快捷方式,应该没有问题的,是不是把exe考到桌面了?
      

  4.   

    to dirdirdir3:
      是有问题的啊,是数据库打不开,我是用INNO安装工具,做成的安装包,安装后,桌面的快捷方式不行。但到安装目录下运行就可以。这是个问题的啊,我VC不熟悉,DELPHI里面我知道怎么解决。
      

  5.   

    to Mackz:
      你好,你说的方法是可以的,设置后成功,问题是需要手工设置。如果是共享软件,不可能到每个用户那里帮他们手工设置一下吧?应该有别的可行办法啊。
      

  6.   

    我用的就是gison()的方法,GetModuleFileName获得是你点击的执行文件的绝对路径
    之后的语句是为了得到ACCESS数据库的绝对路径
      

  7.   

    CString strWorkPath = szPath;
    CString strProfile = strWorkPath + m_pszProfileName;
    m_pszProfileName = _tcsdup(strProfile);这后面3句可以不要,我只是从我的程序段里面拷贝过来的.
      

  8.   

    在App::InitInstance()加入如下代码:#include "direct.h"  //在文件头中包含TCHAR szPath[_MAX_PATH];
    memset(szPath, 0, sizeof(szPath));
    GetModuleFileName(NULL, szPath, _MAX_PATH);
    char* p = strrchr(szPath, '\\');
    if(p != NULL)
    *(p+1) = '\0';
    _chdir(szPath);加入这个应该可以,不需要用SetCurrentDirectory.你试试看行不行?