visual studio 2010 - mfcc++参考INI文件在部署后的应用程序文件夹
visual studio 2010 - MFC C++ Reference INI file in application folder after deployment
希望得到一些帮助,因为我正在撕裂我的头发!我用的是Visual Studio 2010。
我有一个MFC c++应用程序部署。我有一个config.ini文件,我想在exe启动时引用它。目前,用户不能双击*。myfile并打开它,因为应用程序没有在应用程序文件夹中"启动"(我正在安装ini文件的地方),因此无法找到ini。我尝试了以下
-
我试图找到关于设置&打开操作的"开始"文件夹的信息,但找不到任何信息。
-
我找不到任何关于在安装时设置ini文件的注册表值的信息,因为这将是一个相对的参考,取决于用户的选择,所以这并不适用。
-
它是非托管的,所以c++/CLI的app.config解决方案不适用。
-
使用应用程序数据文件夹,但这给了我错误的路径-我使用Windows 7,这可能是为什么,但我希望我的部署在Windows XP ++上工作
-
在启动时读取应用程序路径(从这里)(将此放在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";
这是最接近的,但在调试模式下有一个奇怪的"。",使其无效。我可以使用#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。也许这是正确的调试模式?还是开发机器?
感谢所有的输入和提示。它帮助我找到了这个解决方案。希望它能帮助其他人在一个地方有信息。这个解决方案非常简单,可能不适合完全的商业部署!
- 在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中获得%AppData%文件夹?
- http://msdn.microsoft.com/en-us/library/206sadcd.aspx
- http://www.vbforums.com/showthread.php?t=491920
- http://jedej.com/2011/02/22/constant-special-item-id-list-windows-special-folders/
- http://www.codeproject.com/Messages/2623871/using-CSIDL_APPDATA-or-CSIDL_COMMON_APPDATA.aspx
我很感激任何进一步的帮助,因为我相信有更完善和灵活的解决方案(例如处理"所有用户"的安装选择)。
相关文章:
- 如何将更多文件夹添加到c++include路径
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何在文档文件夹中创建目录
- "assimp/config.h"找不到,但它在文件夹中
- C++入门 5 版:类消息和文件夹
- 我可以在 Arduino 的库文件夹之外安装库吗?
- 如何按文件扩展名引用文件夹中的文件
- 在QTreeView中仅显示共享驱动器和文件夹
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- 介子复制/安装头文件到输出目录并保持文件夹结构
- vcruntime.h 从 Windows 包含文件夹中丢失?
- 在文件夹迭代上实现 RAII
- 使用 Powershell 命令将 cpp 文件的文件夹编译为 GNU 的 g++
- 使文件夹中的所有文件可供所有项目(子目录)访问
- 无法使用 CMake 从其他文件夹添加源文件
- 如何在安卓工作室中将c ++头文件从一个文件夹导入到另一个文件夹?
- 文件夹中的Windows应用商店部署文件,而不是MSI
- visual studio 2010 - mfcc++参考INI文件在部署后的应用程序文件夹