2009-10-10 46 views
5

我需要保存一个设置,该设置随后可用于给定机器上应用程序的所有用户。它需要在Vista/Win 7上运行,并且该应用程序不会以管理员身份启动。如何在Vista下保存所有用户的设置

  • 无法保存为 Program Files文件夹是在Vista上保护 程序目录
  • 无法HKEY_LOCAL_MACHINE另存为的受保护 太
  • 不能保存到服务器或Web的服务

我可以在哪里保存数据? 即使应用程序权限在执行过程中以某种方式提升,我担心的是注册表现在已经在Vista中虚拟化了 - 所以我最终将得到一个特殊的HKEY_LOCAL_MACHINE,它实际上只针对当前用户。

我使用.NET

回答

9

通用应用程序数据

System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) 

这是你可以用它来保存在多个用户和操作系统的多个版本数据的文件系统路径。路径可能因版本而异,但由于您正在使用环境变量,因此上面的行将解析为可用路径。

编辑:
想补充这是一个音符,因为它是唯一的暗示;它不需要提升权限来写入这个目录,它的目的就是为了这个目的。

+0

Awsome!正是我在找什么。谢谢! – 2009-10-10 15:10:14

8

正如Quintin正确回答,%ALLUSERSPROFILE%路径(.NET中的Environment.SpecialFolder.CommonApplicationData)是您正在寻找的。

两个重要的事情要记住,虽然,这样做的时候:

  • 这是很好的做法,为您的企业和应用使用你的应用程序安装程序的子文件夹。 E.g:

    Dim DataPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) 
    DataPath = IO.Path.Combine(DataPath, "ACME Corp.") 
    DataPath = IO.Path.Combine(DataPath, "Widget App") 
    DataPath = IO.Path.Combine(DataPath, "1.0") '//Optional, but possibly handy to easily migrate configuration files across major app versions 
    
  • 尽管所有用户都具有读访问您所创建的文件夹,写访问默认情况下仅限于创建的文件夹,以及管理员组和本地系统的成员的帐户。如果所有用户都应该能够修改通用配置文件(由一个用户创建,但由另一个非Admin用户重新编写),则需要明确安排此访问。当你的应用程序第一次运行时再次,这是最好的从您的应用程序安装完成,但可以从代码中要做的事,例如:

    Dim di As New IO.DirectoryInfo(DataPath) 
    Dim ds = di.GetAccessControl 
    ds.AddAccessRule(New Security.AccessControl.FileSystemAccessRule(...)) 
    di.SetAccessControl(ds) 
    
+0

谢谢,这肯定会让我失望! – 2009-10-10 15:38:58

-1

这里是一个变通方法,让您为所有坚持设置用户:

  1. 将设置文件放在程序文件中,以供应用程序读取。
  2. 要修改此设置文件,请创建一个旨在写入设置文件的新应用程序。
  3. 启动这个设置从主应用程序修改应用程序设置为“运行为”动词

    Process p = new Process(); 
    p.StartInfo = new ProcessStartInfo("changeXMLSettings.exe"); 
    p.StartInfo.Verb = "runas"; 
    p.Start(); 
    

这将提示进行提升,并给设置修改应用程序权限写入程序文件目录。

+0

考虑到我们已经为大约4年前发布的这个完美的(更正确的)解决方案,为什么你会想要使用这种解决方法? – 2013-05-26 07:28:33

相关问题