围绕Windows UAC限制设计的正确方法?

时间:2009-08-31 17:21:17

标签: windows-7 windows-vista installation uac

我发现我编写的应用程序在Windows Vista / 7下无法在任何级别启用UAC时正常工作,因为它将文件写入程序的安装目录,默认为“C:\ Program Files \ MyProgram”。 “如果UAC被禁用(或在任何其他版本的Windows上)它可以正常工作 - 我读到UAC默认拒绝应用程序对Program Files目录的写访问。

我的问题是,我应该如何编写我的应用程序,以便可以在没有任何“权利”的情况下使用它。我不希望用户必须使用提升的权限或管理员来运行它。我只是想让它发挥作用。是否存在任何应用程序在UAC下具有写入权限的某些目录,其中可能更好地编写我的文件?它们主要是动态创建/销毁/更新的配置文件。

谢谢你的帮助!

2 个答案:

答案 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(这是我个人最喜欢的技术)。框架路径将在其返回的路径中包含特定于应用程序的限定符,以区分(例如)应用程序的不同版本。