c++ - 部署后应用程序文件夹中的 MFC C++ 引用 INI 文件

标签 c++ visual-studio-2010 deployment mfc

希望在这里得到一些帮助,因为我正在撕扯我的头发!我正在使用 Visual Studio 2010。

我有一个 MFC C++ 应用程序要部署。我有一个 config.ini 文件,我想在 exe 启动时引用它。目前用户无法双击 *.myfile 并打开它,因为应用程序不“从”应用程序文件夹(我正在安装 ini 文件的位置)“开始”,因此找不到 ini。我试过以下方法

  • 我尝试查找有关为 &Open 操作设置“开始于”文件夹的信息,但找不到任何信息。

  • 我找不到任何有关在安装时设置 ini 文件的注册表值的信息,因为这将是一个相对引用,具体取决于用户的选择,因此 this不适用。

  • 它是非托管的,因此 C++/CLI app.config 解决方案不适用。

  • 使用 Application Data 文件夹,但是 this给了我错误的路径 - 我正在使用 Windows 7,这可能就是原因,但我希望我的部署能够在 Windows XP++ 上运行。

  • 在启动时读取应用程序路径(来自 here )(将其放入 CMyApp::InitInstance()。

代码:

CString strPath;
TCHAR* pstrExePath = strPath.GetBuffer (MAX_PATH);
::GetModuleFileName (0, pstrExePath, MAX_PATH);
strPath.ReleaseBuffer();
int pos = strPath.ReverseFind('\\');
strPath = strPath.Left(pos);
strPath += "\\config.ini";

这是最接近的,但在 Debug模式下,路径中有一个奇怪的“\.\”使其无效。我可以使用 #ifdebug,但这肯定很乱?

非常感谢任何帮助 - 谢谢!


编辑:

使用这个:

TCHAR szPath[MAX_PATH];
if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath)))
{
    MessageBox(NULL,szPath, "MyApp", MB_OK|MB_ICONWARNING);
}

我得到:“C:\ProgramData”作为 szPath。也许这适合 Debug模式?还是开发机?

最佳答案

感谢所有的输入和提示。它帮助我找到了这个解决方案。希望它可以帮助其他人将信息集中在一个地方。此解决方案非常简单,可能不适用于完整的商业部署!

  • 在 VS2010 的文件系统中(设置) 将配置文件放在用户的 应用程序数据文件夹\产品名称
  • 将 InstallAllUsers 设置为 false,这样 你不需要条件条件 您的配置文件位于,基于 用户的安装选择
  • 在 InitInstance() 函数中添加 类似于以下内容:

[名单破坏者]

TCHAR szPath[MAX_PATH] = {0};
if(SUCCEEDED(SHGetFolderPath(NULL, CSIDL_APPDATA|CSIDL_FLAG_CREATE,NULL,SHGFP_TYPE_CURRENT,szPath))) 
{
    PathAppend(szPath, "\\MyApp\\");
            // Can check to create the directory here
    //if (!PathFileExists(szPath))
    //  CreateDirectory(szPath, NULL);
    PathAppend(szPath, TEXT("MyApp.ini"));
            // can check to create default file here if removed by user
    //if (!PathFileExists(szPath))
        //g_ConfigData.write_default()  // be nice if it could write itself
    //MessageBox(NULL,szPath, "MyApp", MB_OK|MB_ICONWARNING);
}
if (!g_ConfigData.ReadData( szPath ) )
    MessageBox(NULL,"Configuration file cannot be read", "MyApp", MB_OK|MB_ICONWARNING);

在这方面真正帮助我的一些有用链接是:

我将不胜感激任何对此的进一步帮助,因为我确信有更完善和灵活的解决方案(例如,处理安装时的“所有用户”选择)。

关于c++ - 部署后应用程序文件夹中的 MFC C++ 引用 INI 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6627701/

相关文章:

c++ - 指向模板类方法的函数指针

css - 如何在 Visual Studio 2010 中更改 CSS 文件的字体和颜色?

c++ - 如何使用 fgets 获取文本并保存 std::string

c++ - 寻找特殊的 C++ 数据结构

c# - 在 Repeater 中更改 LinkBut​​ton 的颜色

visual-studio - 从 Visual Studio 部署单个 Azure Function

javascript - Ant 目标依赖于 gulp 任务

deployment - 免费安装向导软件

c++ - 通过重载 operator[] 附加到数组

visual-studio - Visual Studio 2010 : Name of document tab context menu