2009-07-06 2 views
2

ここで、この質問のとおり、私は、善良な市民になることを開始しました:私のユーザー情報は、現在の環境変数に書き込まれユーザー/パブリックはWindows 7に書き込めません。ユーザーデータはどこに置くのですか?

Domain compatibility: where should shared data be written?

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) 

し、ディレクトリを追加そこ。ディレクトリが存在しない場合は、プログラムによって自動的に作成され、すべてのクロスユーザー情報(ログファイル、取得されたデータ、セットアップオプションなど)はすべてそのファイルに格納されます。そのファイルの私の理解は、マシンの設定に関係なく、完全にユーザーが書き込み可能でなければならないということです。

Windows XPでは、ドメインに接続しても問題ありません。このファイルは検出され、正しく書き込まれます。 Windows 7では、プログラムが動作しません。ユーザーのディレクトリはC:\ ProgramData \ MyFolderになり、そのフォルダは読み取り専用として作成されます(なぜなら、単に読み込み専用にしないでください。結局誰もCommonApplicationDataの場所に書き込もうとしません)。

どのディレクトリを使用する必要がありますか?その '特別なフォルダ'は、私が必要とするタスク専用のフォルダですが、そのフォルダはユーザーが書き込めないと思われます。

最初の応答に応じて編集: 私はWiXインストーラーを使用していますが、そこにインストーラーにファイルを追加しても問題ありません。私はそれをやり遂げる方法がわからないので、WiXインストーラの魔法の言葉で答えてください。

答えて

2

Vista compatibility guidelinesによれば、アプリケーションはインストーラのCommonApplicationsDataの下にそのもののフォルダを作成する必要があります(インストーラも必要です)。そこに適切な権限を割り当てます。

+0

すべてのユーザーにFileSystemAccessRuleを使用するにはどうすればよいですか?関数呼び出しは、特定のユーザーIDのみを使用するように見えます。 – mmr

+0

そのユーザーIDは、「Everyone」とすることができます。これは、Windowsユーザーが所属するグループです。ただし、名前をハードコードするべきではありません。ローカライズされたWindowsのバージョンによって異なります。代わりに、次のようなものを使用してください。 SecurityIdentifier everyone = new SecurityIdentifier(WellKnownSidType.WorldSid、null); FileSystemAccessRuleルール=新しいFileSystemAccessRule(誰も、...); –

関連する問題