2009-09-16 71 views
1

我一直在測試我的應用程序以查看它在非管理用戶運行時的工作情況,並發現文件處理問題。當嘗試覆蓋文件時,如果文件是由管理員用戶創建的,則會出現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); 

威爾做了以上所有文件都位於解決這個問題的目錄?或者我將不得不爲每個文件做些事情?如果是的話那是什麼東西?

編輯:

非管理員用戶不能修改管理員用戶創建的文件。不是很好。我需要所有用戶都可以編輯所有文件。當文件最初創建時,是否沒有可以設置的某種權限?

回答

1

我剛剛在All Users \ Application Data目錄中檢查了權限。 「用戶」和「超級用戶」ACL不具有「刪除子文件夾和文件」權限。

因爲「CREATOR OWNER」ACL具有完全控制權,所以它們可以刪除它們自己的文件。

至於如何解決這個問題,你可以給每個人所有的訪問權限,但一個更好的主意將是授予「用戶」權限&「高級用戶」ACL在應用程序的appdata目錄中的「刪除子文件夾和文件」權限。

或者,您可以在創建時爲「用戶」和「超級用戶」在文件本身上分配「刪除」和「修改」權限。

1

此代碼將爲用戶提供該文件夾的完全訪問權限,但是,這可能會再次導致安全性失敗。

確保應用程序始終可以存儲信息的最佳方式是通過IsolatedStorage。但是,如果您需要在您的應用程序之外訪問您的文件,那麼這不是最佳解決方案。

+0

某些文件可能需要從應用程序外部訪問。既然如此,我該怎麼辦? – 2009-09-17 22:44:05

+0

您可以嘗試使用用戶自己的應用程序數據文件夾。默認情況下,他們應該有權訪問,而不是管理員。 您可以通過Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 獲取用戶的路徑。這意味着應用程序數據不會在用戶之間共享。 HTH。 – 2009-09-18 08:17:16

+0

應用程序數據需要爲所有用戶共享。這就是我使用All Users \ Application Data目錄的原因。它只是以管理員用戶身份登錄時創建的文件不能由非管理員用戶修改。 – 2009-09-18 21:20:59

1

如果您使用類似的代碼爲每個人在完成創建後完全訪問文件,那麼該如何處理?如果我正確理解你,那麼這些文件將始終由你的應用程序創建,對吧?然後,首先創建文件的用戶也有權調整文件的安全設置。然後,只需創建一個文件公共權限並且所有用戶都可以在稍後替換該文件即可。

+0

這就是我所做的,但給了R. Bemrose的答案,因爲他的回答是我找到了解決方案。不過謝謝。 – 2009-09-24 17:31:40