14

私のアプリは、実行時にアプリケーションで編集できるいくつかのファイルをインストールする必要があります。インストール シールドはエイリアス [CommonAppDataFolder] を提供します。これは、Vista および Windows 7 では c:\programData に解決され、Windows XP でも機能します。同様のパスを返す win32 関数はありますか?

オペレーティング システムに応じて異なる関数を呼び出す必要があるのでしょうか。

4

2 に答える 2

22

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();
   }
}
  • Windows XP: C:\Documents and Settings\All Users\Application Data
  • Windows Vista: C:\ProgramData
  • Windows 7: C:\ProgramData

参照: CSIDL

于 2012-06-25T19:41:02.387 に答える