5

.NET (具体的には C#) のすべてのユーザー (管理者または制限付き) が使用できるアプリケーションがあります。

アプリケーションを最初に起動すると、その後のすべての起動で必要ないくつかのファイルが C:\Documents and Settings\All Users\Documents\ に作成されます。

XP の制限付きユーザーがアプリケーションを起動する最初のユーザーである場合、ファイルは正常に作成され、制限付きユーザーと管理者の両方が正常に実行できます。

ただし、管理者 (または別の制限付きユーザーと推測しています) が最初にアプリケーションを起動した場合、制限付きユーザーはアプリケーションを実行できません。

管理者によって作成された場合に読み書きできない 2 つのファイルは、Log4Net ログ ファイルと SQLite db ファイルです。

SQLite データベース ファイルは、単純な .NET File.Copy(sourcepath, destinationpath) で作成されています。sourcepath は、アプリケーションと共にインストールされるシード データベース ファイルです。したがって、最初の実行時に C:\Program Files\app install\seed.db からコピーされます。

ファイルをコピーするときにファイルのアクセス許可を設定する方法はありますか? File.SetAccessControl() おそらく?それがどのように機能するかはわかりません。

もう 1 つの問題は、log4Net ローリング ファイル アペンダーが古いファイルをロールして新しいファイルを作成しないことです。古いファイルは管理者ユーザーがアプリを実行したときに作成されたものだからです。

何か案は?皮肉なことに、これはすべて Vista で制限付き/管理者アカウントを使用して完全に正常に機能します。これは、管理者/制限付きアカウントを使用した XP でのみ発生します。

4

2 に答える 2

6

進むべき道だと思いますSetAccessControl。多分このようなもの:

// get the existing access controls
FileSecurity fs = File.GetAccessControl(yourFilename);

// add the new rule to the existing settings
fs.AddAccessRule(new FileSystemAccessRule(
    @"DOMAIN\Users",  // or "BUILTIN\Users", "COMPUTER\AccountName" etc
    FileSystemRights.Modify,
    AccessControlType.Allow));

// set the updated access controls
File.SetAccessControl(yourFilename, fs);

注: ファイルから既存のアクセス制御リストを取得し、それに新しいルールを追加することが重要です。新しいアクセス制御リストを最初から作成すると、既存のアクセス許可が完全に上書きされます。

于 2009-02-11T00:34:24.680 に答える
2

ええ、それは SetAccessControl メソッドです。ここに良い例があります (satankidneypie からの投稿)。

幸運を

于 2009-02-11T00:31:08.993 に答える