2010-09-07 39 views
0

我有一個應用程序安裝在Vista PC上,由具有較高用戶權限的用戶(以及管理員通過UAC提升提示)安裝。文件和目錄的默認訪問權限

安裝程序將一些文件寫入%APPDATA%文件夾中的文件夾。

當用戶(沒有提升的用戶權限)運行應用程序時,共享的%APPDATA%(Vista中的c:\ ProgramData)中的文件(和創建的文件夾)不可訪問。

這些文件是由第三方組件編寫的。如果在沒有提升用戶權限的情況下使用該組件,則這些文件可以訪問(並且可寫)。

我試圖改變訪問權限文件寫入沒有運氣。

有沒有辦法讓文件默認訪問權限完全控制給大家?

+0

你是說你爲你的應用程序編寫了一個安裝程序,需要更改它生成的文件的權限? – insipid 2010-09-07 21:55:28

+0

具有提升權限的*用戶* - 他們作爲什麼登錄?他們是否以管理員身份登錄以獲取提升的權限,然後以自己身份重新登錄以獲得正常的用戶權限?如果是這樣,他們正在訪問不同的'%APPDATA%'位置。 – slugster 2010-09-07 23:38:59

+0

反過來。用戶以普通用戶身份登錄,管理員通過UAC提升提示安裝應用程序。 也許%APPDATA%不正確。它是Vista中的c:\ ProgramData – Fedearne 2010-09-08 06:54:13

回答

2

我通過創建一個子文件夾I C解決了這個問題:\ ProgramData,使用方法描述here

bool modified; 
DirectoryInfo directoryInfo = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "MyFolder"); 
DirectorySecurity directorySecurity = directoryInfo.GetAccessControl(); 
FileSystemAccessRule rule = new FileSystemAccessRule(
    securityIdentifier, 
    FileSystemRights.Write | 
    FileSystemRights.ReadAndExecute | 
    FileSystemRights.Modify, 
    InheritanceFlags.ContainerInherit | 
    InheritanceFlags.ObjectInherit, 
    PropagationFlags.InheritOnly, 
    AccessControlType.Allow); 
directorySecurity.ModifyAccessRule(AccessControlModification.Add, rule, out modified); 
directoryInfo.SetAccessControl(directorySecurity); 

規則由子文件夾和文件的繼承。在「MyFolder」中創建的所有文件和文件夾都可寫入Users組。

0

首先,您確定您的安裝程序正在爲所有用戶設置AppData,而不僅僅是一個?如果安裝程序在一個用戶的AppData文件夾下生成文件夾,那麼通常在系統上擁有多少權限並不重要,除非您是該用戶,否則您沒有進入該文件夾。

其次,它聽起來像您的安裝程序正在代表執行安裝的用戶寫入文件夾和/或文件,這將是一個管理員,因此需要提升特權。有一種方法可以獲取和更改文件夾和/或文件的ACL權限。也許你嘗試的代碼片段不起作用可能會幫助我們幫助你。

+0

+1我說在我的評論中也是如此,但你是第一個:) – slugster 2010-09-07 23:40:48

+0

該文件夾是共享的應用程序數據(在Vista中是c:\ ProgramData)。運行安裝程序的用戶是通過UAC提升代表用戶的管理員。我希望之後寫入的c:\ ProgramData文件可以被用戶訪問(寫入)。用戶對c:\ ProgramDat具有寫入權限,但不具有安裝程序寫入的文件。 – Fedearne 2010-09-08 06:52:09