我正在创建一个将使用 .net 安装程序项目安装的程序。该程序将设置文件写入 Program Files 目录中的目录。它认为,如果受限用户正在运行该程序,则某些活动目录设置将阻止应用程序正确访问该目录。是否可以通过安装更改应用程序文件夹的设置,这样就不会出现问题?

有帮助吗?

解决方案

写入 Program Files 文件夹是一个非常糟糕的主意,您应该假设该位置在安装后是“只读”的。

如果两个以上的人同时使用计算机(例如,在程序文件中保存用户设置)会导致问题。终端服务)谁的设置应该被保存,您希望其他用户知道“您的”设置吗?如果您的程序以用户 A 的身份将设置写入文件,但用户 B 无法编辑该文件,会发生什么情况?用户 B 可以访问该目录,但不能读取/删除首选项文件,因为该文件归用户 A 所有。

旧版 win9x 程序经常写入程序文件文件夹,Windows Vista 实际上做了一些巧妙的技巧来让这些程序运行。当你的程序写入一个文件时,vista实际上将它放在只有该用户才能访问的其他地方。对 HKLM 的注册表写入也做了同样的事情(或者是我在调试数小时后发现的......),而 Server 2008 也做了同样的事情。

如果您需要保存用户设置,最好的选择是将设置保存到应用程序数据文件夹(环境变量%APPDATA%)

如果设置是系统范围的,则管理用户应在安装后或首次运行时设置这些设置,并且它们不应被有限的用户覆盖。

所以回答你的问题 - 是的,有一种方法可以做到你所要求的。但这是一个坏主意,它不安全,从长远来看可能会导致问题。

其他提示

您可以编写一个自定义安装程序类,它可以更改文件夹的安全权限。这假设安装是由有权更改文件/目录安全性的用户完成的。

最好的选择是根本不写入 Program Files 下的目录。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top