質問

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

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

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

これを見つけました:

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

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

編集:

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

役に立ちましたか?

解決

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

「作成者所有者」がACLにはフルコントロールがあります。

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

代わりに、「削除」を割り当てることもできます;および「変更」 " Users"のファイル自体に対する許可および「パワーユーザー」作成されたとき。

他のヒント

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top