1

私は自分のアプリケーションをテストして、管理者以外のユーザーが実行したときにどれだけうまく機能するかを確認してきましたが、ファイル処理に問題があることがわかりました。ファイルが管理ユーザーによって作成された場合、ファイルを上書きしようとするとUnauthorizedAccessExceptionが発生します。

ファイルを書き出すときは、最初にファイルを.tmpファイルとして作成し、次にFile.Copyを使用して元のファイルを上書きします。.tmpファイルは作成されますが、File.Copyは失敗します。私のファイルはパブリックディレクトリ(XPでは「C:\ DocumentsandSettings \ AllUsers \ ApplicationData」)に書き込まれます。

すべてのユーザーがアプリケーションファイルを完全に制御できるようにするにはどうすればよいですか?

私はこれを見つけました:

        System.Security.AccessControl.DirectorySecurity sec =  
                                System.IO.Directory.GetAccessControl ( directory );  
        FileSystemAccessRule accRule = new FileSystemAccessRule ( Globals.userIdentity,  
             FileSystemRights.FullControl, AccessControlType.Allow );  
        sec.AddAccessRule ( accRule );  

すべてのファイルが配置されているディレクトリに対して上記を実行すると、この問題は解決しますか?または、各ファイルに対して何かを行う必要がありますか?もしそうなら、それは何ですか?

編集:

管理者以外のユーザーは、管理者ユーザーが作成したファイルを変更することはできません。これは良くない。すべてのファイルをすべてのユーザーが編集できるようにする必要があります。これを許可するファイルが最初に作成されたときに設定できるある種のアクセス許可はありませんか?

4

3 に答える 3

1

このコードは、ユーザーにフォルダーへのフルアクセス権を付与しますが、これはセキュリティで再び失敗する可能性があります。

アプリケーションが常に情報を保存できるようにするための最良の方法は、IsolatedStorageを使用することです。ただし、アプリケーションの外部でファイルにアクセスする必要がある場合、これは最善の解決策ではありません。

于 2009-09-17T08:42:45.757 に答える
1

All Users \ApplicationDataディレクトリの権限を確認しました。「ユーザー」および「パワーユーザー」ACLには、「サブフォルダーとファイルの削除」権限がありません。

「CREATOROWNER」ACLにはフルコントロールがあるため、自分のファイルを削除できます。

これを回避する方法については、すべてのユーザーにすべてのアクセスを許可することもできますが、アプリのappdataディレクトリで「ユーザー」および「パワーユーザー」ACLに「サブフォルダーとファイルの削除」権限を付与することをお勧めします。

または、ファイルの作成時に、ファイル自体に「ユーザー」と「パワーユーザー」の「削除」と「変更」のアクセス許可を割り当てることもできます。

于 2009-09-21T19:05:57.203 に答える
1

同様のコードを使用して、作成後にファイルへのフルアクセスを全員に許可する場合はどうでしょうか。私があなたを正しく理解していれば、ファイルは常にあなたのアプリケーションで作成されますよね?そうすれば、最初にファイルを作成したユーザーには、ファイルのセキュリティ設定を調整する権限もあります。次に、ファイルが作成され、すべてのユーザーが後でファイルを置き換えることができるようになったら、ファイルにパブリック権限を設定するだけの問題です。

于 2009-09-21T19:23:10.860 に答える