1

我正在尝试编写一个可以在 Windows Vista 和 XP 上运行的安装程序(通过创建一个 .vdproj)。我发现的唯一一件事是,当我尝试在 Vista 上运行它时,我在安装程序中包含的文件以用户组的只读权限安装。这是一个问题,因为应用程序需要从这些文件中读取/写入。我能够让它工作的唯一方法是“以管理员身份运行”或实际更改权限。有谁知道如何让这些文件对任何人开放写?谢谢。

4

2 回答 2

6

Program Files 文件夹及其内容对于标准用户是只读的。这是设计使然,您会发现在 Windows XP 上也是如此。 只是在 windows xp 上,很多人一直以管理员权限运行,您可能会侥幸逃脱。如果您想将您的应用程序分发到商业环境中,您很快就会发现它也无法在 XP 上运行。

如果标准用户需要写入权限,解决方案是不要将文件放在程序的可执行文件夹中。而是将它们放在 Application Data 文件夹中。对于大多数 xp 机器,将在此处:
C:\Documents And Settings\All Users\Application Data\Your App

但是,情况并非总是如此,无论如何它在 Vista 上略有不同,因此请确保您通过编程环境提供的机制获得该路径。在 .Net 中,您可以使用该Environment.GetFolderPath()功能。

于 2008-11-17T15:06:36.717 回答
1

为乔尔的回答添加一些细节:

  • 在 Win2K 和 XP 中,CSIDL_APPDATA 应该用于每个用户,漫游。在 Vista 中,这是 FOLDERID_RoamingAppData。

  • 在 Win2K 和 XP 中,CSIDL_LOCAL_APPDATA 应该用于每个用户,非漫游。在 Vista 中,这是 FOLDERID_LocalAppData。

  • 在 Win2K 和 XP 中,CSIDL_COMMON_APPDATA 应该用于per-machine,即应用程序的所有用户。在 Vista 中,这是 FOLDERID_ProgramData。

注意最后一个文件夹通常对非管理员非高级用户是只读的。推荐的解决方案是在应用安装期间创建一个读/写子文件夹。

编辑:要使用托管代码在特定机器上获取这些常量的实际位置,请尝试使用此处定义的常量System.Environment.GetFolderPath。另一个有用的链接在这里

于 2008-11-17T17:03:19.663 回答