7

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

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

谢谢你的帮助!

4

2 回答 2

12

每个用户应用程序的特定数据应写入 AppData 文件夹。

您应该将SHGetKnownFolderPath与 FOLDERID_LocalAppData 一起使用。

在托管代码中,您应该使用System.Environment.GetFolderPath和 System.Environment.SpecialFolder.LocalApplicationData。

于 2009-08-31T17:23:31.197 回答
4

是的,有特定的位置。将此 msdn 文章视为第一个参考。它提到了这些位置:

  • CSIDL_APPDATA
  • CSIDL_LOCAL_APPDATA
  • CSIDL_COMMON_APPDATA

在本机代码中,该方法SHGetKnownFolderPath应该证明是有用的。

在托管代码中,您可以使用Environment.GetFolderPath(). 如果您在特定的应用程序框架中,例如 windows 窗体,您可以通过直接属性更轻松地访问,例如Application.LocalUserAppDataPath(这是我个人最喜欢的技术)。框架路径将在其返回的路径上包含特定于应用程序的限定符,以区分(例如)您的应用程序的不同版本。

于 2009-08-31T17:28:13.293 回答