我发现我编写的应用程序在Windows Vista / 7下无法在任何级别启用UAC时正常工作,因为它将文件写入程序的安装目录,默认为“C:\ Program Files \ MyProgram”。 “如果UAC被禁用(或在任何其他版本的Windows上)它可以正常工作 - 我读到UAC默认拒绝应用程序对Program Files目录的写访问。
我的问题是,我应该如何编写我的应用程序,以便可以在没有任何“权利”的情况下使用它。我不希望用户必须使用提升的权限或管理员来运行它。我只是想让它发挥作用。是否存在任何应用程序在UAC下具有写入权限的某些目录,其中可能更好地编写我的文件?它们主要是动态创建/销毁/更新的配置文件。
谢谢你的帮助!
答案 0 :(得分:12)
应将每用户应用程序特定数据写入AppData文件夹。
您应该将SHGetKnownFolderPath与FOLDERID_LocalAppData一起使用。
在托管代码中,您应该将System.Environment.GetFolderPath与System.Environment.SpecialFolder.LocalApplicationData一起使用。
答案 1 :(得分:4)
是的,有特定的位置。考虑this msdn article作为第一个参考。它提到了这些地点:
CSIDL_APPDATA
CSIDL_LOCAL_APPDATA
CSIDL_COMMON_APPDATA
在本机代码中,方法SHGetKnownFolderPath
应该证明是有用的。
在托管代码中,您可以使用Environment.GetFolderPath()
。如果您使用的是特定的应用程序框架(例如Windows窗体),则可以通过直接属性更轻松地访问,例如Application.LocalUserAppDataPath
(这是我个人最喜欢的技术)。框架路径将在其返回的路径中包含特定于应用程序的限定符,以区分(例如)应用程序的不同版本。