Ben*_*een 5 .net c# vb.net windows-vista windows-7
我需要保存一个设置,然后该设置可供给定计算机上的所有应用程序用户使用.它需要在Vista/Win 7上运行,并且该应用程序不会以管理员身份启动.
我在哪里可以保存数据?即使应用程序权限在执行期间以某种方式提升,我担心注册表现在在Vista中虚拟化 - 所以我最终会得到一个特殊的HKEY_LOCAL_MACHINE,它实际上只适用于当前用户.
我正在使用.NET
常见应用数据
System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
Run Code Online (Sandbox Code Playgroud)
这是一个文件系统路径,可用于跨多个用户和多个版本的操作系统保存数据.路径可能因版本而异,但由于您使用的是环境变量,因此上述行将解析为可用路径.
编辑:
希望将其添加为注释,因为它只是暗示; 它不需要提升权限来写入此目录,它就是为了这个目的.
正如Quintin正确回复的那样,%ALLUSERSPROFILE%路径(.NET中的Environment.SpecialFolder.CommonApplicationData)就是您正在寻找的.
但是,这样做时要记住两个重要的事项:
最好使用应用程序安装程序为公司和应用程序创建子文件夹.例如:
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
Run Code Online (Sandbox Code Playgroud)虽然所有用户都对您创建的文件夹具有读访问权限,但默认情况下,写访问权限仅限于创建该文件夹的帐户,以及Administrators组和LocalSystem的成员.如果所有用户都应该能够修改公共配置文件(由一个用户创建,但由另一个非管理员用户重写),则需要明确安排此访问.同样,这最好从您的应用安装程序完成,但也可以从代码中完成,例如,当您的应用首次运行时:
Dim di As New IO.DirectoryInfo(DataPath)
Dim ds = di.GetAccessControl
ds.AddAccessRule(New Security.AccessControl.FileSystemAccessRule(...))
di.SetAccessControl(ds)
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
2099 次 |
最近记录: |