2011-07-04 65 views
1

我的應用程序需要將一些信息寫入文件並保持其對機器通用(對所有用戶通用)。用於存儲「每臺機器」應用程序詳細信息的路徑

目前我保存它C:\ Documents和Settings \所有用戶\應用數據

但問題是,每當文件由管理員所有其他用戶創建沒有許可到它。

但我想爲所有用戶寫入文件權限,以便所有用戶都可以修改其中的數據。任何人都可以幫助我嗎?

編輯:我想存儲一個xml文件,這是所有用戶都通用的。

謝謝

回答

0

註冊表是否會成爲您的好去處? (取決於你想要存儲的內容)。 你可以在HKLM配置單元上創建一個節點,供所有用戶訪問

+0

不,它不會是,我想存儲一個XML文件。 – Lamps

0

我建議你學習File.SetAccessControl()方法和FileSecurity類。特別是,FileSecurity documentation提供了修改給定文件的文件訪問控制列表(權限集)的完整示例。下面是一個簡化版本,例如,這給每個人都爲C:\TEMP\junk.txt讀寫權限:

using System; 
using System.IO; 
using System.Security.AccessControl; 
using System.Security.Principal; 

class WorldWrite 
{ 
    static void Main() 
    { 
     string filename = @"C:\TEMP\junk.txt"; 
     if (!File.Exists(filename)) { 
      Console.WriteLine("No such file " + filename); 
      return; 
     } 

     /* Get the previous ACL, add a rule to give everyone read 
     * and write permission, and write back the resulting ACL. */ 
     FileSecurity fileACLs = File.GetAccessControl(filename); 
     fileACLs.AddAccessRule(new FileSystemAccessRule(
      // For everyone 
      new SecurityIdentifier (
       WellKnownSidType.WorldSid, 
       null /* domain SID; ignored for Everyone */ 
      ), 
      // Allow read and write (of data and metadata), 
      // but not delete or execute 
      FileSystemRights.Read | FileSystemRights.Write, 
      AccessControlType.Allow 
     )); 
     File.SetAccessControl(filename, fileACLs); 
     Console.WriteLine("Success!"); 
    } 
} 

我也關心你是如何指定共享應用程序數據目錄。如果您對C:\Documents and Settings\All Users\Application Data這個名稱進行了硬編碼,那麼您的代碼將無法在非英文版本的Windows或Vista或Windows 7上使用。使用SpecialFolder enum找到正確的目錄可能會更好。

+0

我已經試過這個,但問題是隻有文件的所有者才能夠更改文件的訪問權限。 因此,我打算在第一次創建用戶組「Everyone」時,更改寫入權限。 無論如何謝謝你的答案! – Lamps

+0

等一下,所以你需要有人*其他*而不是文件所有者來更改其權限?我希望你明白爲什麼只有受信任的用戶(如管理員!)通常有這樣的權利...... –

+0

是的..你是對的。 – Lamps

0

如果您使用ClickOnce部署,這將很難做到,因爲您必須提升權限才能讀取/寫入通用文件夾,並且ClickOnce應用程序不會這樣做。

你可以創建一個小的exe文件來做你想做的事情,並讓clickonce應用程序調用它並讓它提升權限。這是你擁有的唯一選擇。

+0

我已經通過在第一次創建文件時向每個人授予寫入權限來修復它..現在其他用戶可以修改該文件:) – Lamps

+0

那麼您是否手動創建文件?或者你是從ClickOnce應用程序中完成的,如果是的話,怎麼做? – RobinDotNet

+0

是的,我正在使用csharp代碼創建xml文件。 – Lamps

相關問題