Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 7 围绕Windows UAC限制的正确设计方法?_Windows 7_Windows Vista_Installation_Uac - Fatal编程技术网

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

Windows 7 围绕Windows UAC限制的正确设计方法?,windows-7,windows-vista,installation,uac,Windows 7,Windows Vista,Installation,Uac,我发现,如果在任何级别启用UAC,我编写的应用程序在Windows Vista/7下都不能正常工作,因为它将文件写入程序的安装目录,默认为“C:\program files\MyProgram”。如果禁用UAC(或在任何其他版本的Windows上)它工作正常-我了解到UAC默认情况下拒绝应用程序对程序文件目录的写访问 我的问题是,我应该如何编写我的应用程序,以便它可以在不需要任何“权利”的情况下使用。我不希望用户必须以提升的权限或管理员身份运行它。我只是想让它工作。在UAC下是否有任何应用程序都

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

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


谢谢你的帮助

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

您应该与FOLDERID\u LocalAppData一起使用


在托管代码中,您应该与System.Environment.SpecialFolder.LocalApplicationData一起使用。

是的,有特定的位置。作为第一个参考。它提到了以下地点:

  • CSIDL\u APPDATA
  • CSIDL\u LOCAL\u APPDATA
  • CSIDL\u COMMON\u APPDATA
在本机代码中,该方法应该被证明是有用的


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

我不会将UAC限制称为应用程序的“限制”。从技术上讲,它们是正确的,但或多或少它只是引导你不去做一些你一开始就不应该做的事情“不应该做”-为什么不?你到底为什么要将配置数据写入程序文件?这是安装目录。这就是可执行文件和库的位置。数据不在那里…@Jim-你的应用程序在许多其他情况下被破坏,比如非管理员用户。Vista使非管理员案例更像是默认案例。如果非管理员可以写入程序文件,则非特权用户可以在其中删除任意数量的特洛伊木马程序,并让管理员运行这些程序,拥有box.AppData听起来是正确的解决方案。也许对某些人来说这听起来很明显,但对我来说似乎没有那么明显。这些文件不是为用户准备的,它们是专门为程序存储设置的。我想有什么地方比应用程序所在的地方更好。看来我错了。我将更改我的方法。如果您使用.NET配置功能(
System.configuration
namespace,这些是C#项目中的.settings文件),您的数据将放置在正确的位置,您将有非常优雅的方式访问和更新它。