我的應用程序需要將一些信息寫入文件並保持其對機器通用(對所有用戶通用)。用於存儲「每臺機器」應用程序詳細信息的路徑
目前我保存它C:\ Documents和Settings \所有用戶\應用數據
但問題是,每當文件由管理員所有其他用戶創建沒有寫許可到它。
但我想爲所有用戶寫入文件權限,以便所有用戶都可以修改其中的數據。任何人都可以幫助我嗎?
編輯:我想存儲一個xml文件,這是所有用戶都通用的。
謝謝
我的應用程序需要將一些信息寫入文件並保持其對機器通用(對所有用戶通用)。用於存儲「每臺機器」應用程序詳細信息的路徑
目前我保存它C:\ Documents和Settings \所有用戶\應用數據
但問題是,每當文件由管理員所有其他用戶創建沒有寫許可到它。
但我想爲所有用戶寫入文件權限,以便所有用戶都可以修改其中的數據。任何人都可以幫助我嗎?
編輯:我想存儲一個xml文件,這是所有用戶都通用的。
謝謝
註冊表是否會成爲您的好去處? (取決於你想要存儲的內容)。 你可以在HKLM配置單元上創建一個節點,供所有用戶訪問
我建議你學習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找到正確的目錄可能會更好。
如果您使用ClickOnce部署,這將很難做到,因爲您必須提升權限才能讀取/寫入通用文件夾,並且ClickOnce應用程序不會這樣做。
你可以創建一個小的exe文件來做你想做的事情,並讓clickonce應用程序調用它並讓它提升權限。這是你擁有的唯一選擇。
我已經通過在第一次創建文件時向每個人授予寫入權限來修復它..現在其他用戶可以修改該文件:) – Lamps
那麼您是否手動創建文件?或者你是從ClickOnce應用程序中完成的,如果是的話,怎麼做? – RobinDotNet
是的,我正在使用csharp代碼創建xml文件。 – Lamps
不,它不會是,我想存儲一個XML文件。 – Lamps