Vista インストーラーですべてのユーザーが共有する書き込み可能なデータはどこに保存されますか?
-
02-07-2019 - |
質問
私のアプリは NSIS 経由でインストールされています。
インストーラーがすべてのユーザーにプログラムをインストールするようにしたいと考えています。
これは、「program files」ディレクトリにインストールすることで実行できます。
システム上のすべてのユーザー アカウントが共有する必要があるデータベース ファイル (firebird) があります。
このデータベース ファイルを「プログラム ファイル」ディレクトリに保存すると、読み取り専用になります。
ユーザーの APPDATA ディレクトリに保存すると、それぞれに異なるコピーが作成され、あるユーザーがデータを追加しても、他のユーザーにはそれが表示されなくなります。
オプション 1 - 「プログラム ファイル」の下のアプリ ディレクトリに「データ」ディレクトリを作成し、インストーラーでこのディレクトリをすべてのユーザーが読み書きできるようにします。これにより、ユーザーの「プログラム ファイル」の仮想化が開始されず、すべてのユーザーが更新できるようになります。ファイルを共有し、お互いの変更を確認します。
他にオプションはありますか?
解決
すべてのユーザーのデータは %ALLUSERSPROFILE% に保存するか、パラメーター CSIDL_COMMON_APPDATA を指定して SHGetFolderPath() を呼び出して、すべてのユーザーの記憶領域を取得する必要があります。
見る http://www.deez.info/sengelha/2006/02/28/windows-vista-changes/ 詳細については。
他のヒント
[すべてのユーザー] プロファイルの下のどこかが明らかな場所です。デフォルトで誰が読み取り/書き込みできるかについてはいくつかのルールがあると思いますが、MS ドキュメントでは、別のものが必要な場合はサブディレクトリを作成し、インストーラーで ACL を直接設定することを推奨しています。
これはセキュリティ ホールです。次を参照してください。 http://blogs.msdn.com/oldnewthing/archive/2004/11/22/267890.aspx
具体的には以下を使用します。
SetShellVarContext all
SetOutPath $APPDATA
File "MyInsecurelySharedFile.txt"
を参照してください。 NSIS スクリプト リファレンス 詳細については。