我的应用程序需要安装一些可以在运行时由应用程序编辑的文件。Install shield 提供了一个别名 [CommonAppDataFolder],它将在 Vista 和 Windows 7 上解析为 c:\programData,并且也适用于 Windows XP。是否有将返回类似路径的 win32 函数?
也许我需要根据操作系统调用不同的函数?
我的应用程序需要安装一些可以在运行时由应用程序编辑的文件。Install shield 提供了一个别名 [CommonAppDataFolder],它将在 Vista 和 Windows 7 上解析为 c:\programData,并且也适用于 Windows XP。是否有将返回类似路径的 win32 函数?
也许我需要根据操作系统调用不同的函数?
SHGetFolderPath
/SHGetSpecialFolderPath
得到你,有CSIDL_COMMON_APPDATA
论据。
请参阅此处的代码片段(在底部):如何使用 Visual C++ 编写将用户和应用程序数据存储在正确位置的 Windows XP 应用程序;原始链接不再有效 - 代码片段被拉到下面):
include <shlwapi.h>
#pragma comment(lib,"shlwapi.lib")
void CreateTemporaryFile()
{
TCHAR szPath[MAX_PATH];
// Get path for each computer, non-user specific and non-roaming data.
if ( SUCCEEDED( SHGetFolderPath( NULL, CSIDL_COMMON_APPDATA,
NULL, 0, szPath ) ) )
{
TCHAR szTempFileName[MAX_PATH];
// Append product-specific path - this path needs to already exist
// for GetTempFileName to succeed.
PathAppend( szPath, _T("\\My Company\\My Product\\1.0\\") );
// Generate a temporary file name within this folder.
if (GetTempFileName( szPath,
_T("PRE"),
0,
szTempFileName ) != 0 )
{
HANDLE hFile = NULL;
// Open the file.
if (( hFile = CreateFile( szTempFileName,
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL )) != INVALID_HANDLE_VALUE )
{
// Write temporary data (code omitted).
CloseHandle( hFile );
}
}
else
DWORD err = GetLastError();
}
}
另请参阅:CSIDL。
自 Delphi XE5以来,此功能是框架的一部分。
System.IOUtils
TPath
GetPublicPath
有关更多信息,请参阅embarcadero docwiki。