3

Win8からWinXPのWindowsディスクに構成ファイルを読み書きする必要があります。これを行うのに最適な場所はどこですか? ProgramData フォルダが許可していないようです

procedure TfrmMain.FormCreate(Sender: TObject);
var
  path: array[0..MAX_PATH] of char;
begin
   SHGetFolderPath(0, CSIDL_COMMON_APPDATA, 0, SHGFP_TYPE_CURRENT, @path);
  AppPath:= Path;
  AppPath:= AppPath + '\Customer\';
  if not DirectoryExists(AppPath) then
   CreateDir(AppPath);
 if FileExists(AppPath + 'Customers.cst') then
 LoadFromFile(AppPath + 'Customers.cst');
end;

procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 if ListModified  then
 begin
  if MessageDlg('Save Changes?', mtWarning, [mbYes, mbNo], 0) = mrYes  then
   SaveToFile(AppPath + 'Customers.cst');
  canClose:= True;
 end
 else 
canClose:= False;
end;
4

1 に答える 1

10

CSIDL_COMMON_APPDATAとして記述されます:

すべてのユーザーのアプリケーションデータを含むファイルシステムディレクトリ。

コンピューター上のすべてのユーザー間で共有されるため、その場所に書き込むには管理者権限が必要です。構成をすべてのユーザーで共有したい場合CSIDL_COMMON_APPDATAは、それが適切な場所です。ただし、そこに書くときは、十分な権利があることを確認する必要があります。

アプリケーションに書き込む必要がある場合CSIDL_COMMON_APPDATA、通常のアプローチは、インストール中にアプリケーションのディレクトリを作成することです。インストーラーは昇格して実行されるため、これを実行できます。また、アプリケーションが後で標準ユーザーとして実行しているときにそのフォルダーに書き込めるように、新しいディレクトリにパーミッシブACLを追加する必要があります。

ユーザープロファイルに保存される構成が必要な場合は、次のようCSIDL_APPDATA説明されているの下の場所を選択する必要があります。

アプリケーション固有のデータの共通リポジトリとして機能するファイルシステムディレクトリ。

これはユーザープロファイルにあるため、マシン上の各ユーザーは構成ファイルの個別のコピーを持ちます。

于 2013-02-22T20:47:34.630 に答える