重複の可能性:
VS2008 セットアップ プロジェクト: 共有 (すべてのユーザーによる) アプリケーション データ ファイル?
すべてのユーザーがアクセスおよび編集できるアプリケーション データを配置するのに最適な場所 (パス) を教えてください。
これは Windows XP と Windows Vista の両方を考慮しており、上記のパスのファイルを変更しても UAC がトリガーされないことを期待しています!
重複の可能性:
VS2008 セットアップ プロジェクト: 共有 (すべてのユーザーによる) アプリケーション データ ファイル?
すべてのユーザーがアクセスおよび編集できるアプリケーション データを配置するのに最適な場所 (パス) を教えてください。
これは Windows XP と Windows Vista の両方を考慮しており、上記のパスのファイルを変更しても UAC がトリガーされないことを期待しています!
プレーンな Win API:フォルダーの種類としてSHGetFolderPathCSIDL_COMMON_APPDATA
。
.NET を使用している場合は、Application.CommonAppDataPath が機能するはずです。また、アプリケーションの仮想化がオフになっていることを確認してください
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
C:\Documents and Settings\All Users\Application Data\ に解決する必要があります。
そこから、MyCompany\MyApp などのサブフォルダーを作成します。
ユーザーがデータを直接変更せず、アプリによってのみ変更される場合は、IsolatedStorage- http://msdn.microsoft.com/en-us/library/3ak841sy (VS.80).aspxはどうでしょうか。
チェッカーは、C または C++ でこれを行うための重要な手がかりを提供します。だから私は彼の答えに投票しました。
彼が省略した詳細は次のとおりです。
// assumes
// company is a pointer to a character sting containing company name
// appname is a pointer to a character string containing application name
// fname is a pointer to a character string cintaining name of file to be created
#include <shlobj.h> // for SHGetFolderPath
#include <direct.h> // for _mkdir
char path[MAX_PATH];
SHGetFolderPath(NULL,CSIDL_COMMON_APPDATA,NULL,NULL,path);
strcat(path,"/");
strcat(path,company);
_mkdir(path);
strcat(path,"/");
strcat(path,appname);
_mkdir(path);
strcat(path,"/");
strcat(path,fname);
// path is now a character string which can passed to fopen
.NET を使用している場合は、Application.CommonAppDataPath が機能するはずです。
%ALLUSERSPROFILE%\Application Data\App
これはおそらく、昇格された権限なしですべてのユーザーがアクセスできる唯一のディレクトリです。
Vista 以降では、MS はSHGetFolderPath()の代わりにSHGetKnownFolderPath( ) を使用することを推奨しているようです。KNOWNFOLDERIDのリストから、要求するフォルダーを選択します。ここでの回答に基づいて、あなたが望む同等のものはおそらくFOLDERID_ProgramData
. この質問はかなり古いものだと思いますが、アーカイブの目的で推測します..
データベースに入れることもできます。