我可以将文件放在哪里,以便非管理员可以编辑这些文件,所有用户都可以访问这些文件

本文关键字:文件 都可以 访问 用户 编辑 管理员 在哪里 我可以 | 更新日期: 2023-09-27 17:57:40

我正在开发一个具有静默更新程序的Windows应用程序,因此需要能够覆盖可执行文件。

该应用程序还加载了一些.dlls

我试着把可执行文件和dll放在应用程序数据文件夹中,但visualstudio警告我,这些文件不会被所有用户访问。

我尝试将可执行文件放在应用程序数据文件夹中,将dll放在程序文件文件夹中,但由于无法加载dll,应用程序崩溃。

我如何才能A)删除警告或B)以更好的方式组织一切?

我可以将文件放在哪里,以便非管理员可以编辑这些文件,所有用户都可以访问这些文件

系统上没有这样的文件夹。我的一些想法是:

  • 使用GAC。据我所知,如果您将二进制文件捆绑为数字签名程序集,GAC将允许静默安装和"升级"。(这里的安全性是作为程序集id一部分的公钥所固有的,所以GAC中的内容并不重要,只要经过签名,"恶意软件"程序集就不能模拟签名的程序集)

  • 使用基于MSI的安装程序:同样,在初始管理安装之后,MSI安装程序将允许对现有数字签名内容进行静默安装修补程序。在这里,安全性是管理员首先授予安装权限所固有的。可以确认已签名的修补程序MSI来自同一发布者,因此MSI不需要重新提示权限)。

  • 将主二进制文件安装到具有UAC提升的共享位置。将修补程序二进制文件存储在每个用户的文件夹中。这样可以防止非管理员用户覆盖其他文件。可能会有一些冗余,但那又怎样呢。

  • 最后(也是最起码的),创建你自己的文件夹,几乎可以放在你想要的任何地方。在创建时,从windows安全的角度来看,软件是新文件夹的所有者,并且作为所有者,您具有调整新文件夹ACL的隐含权限。因此,您的初始安装过程,以用户管理员的身份运行,可以(在可以成功创建的文件夹上)调整文件夹的ACL,以授予"用户"组可继承的R/W访问权限。然后,任何用户随后在文件夹中创建的所有文件都将可供所有用户读取和写入(来宾除外(而且您真的不想让来宾用户对任何内容进行写入访问)。

最后一个选项是一个安全问题,因为普通用户不应该影响其他用户的执行环境。"用户R/W访问"意味着普通用户可以安装木马或以其他方式篡改系统上的其他用户数据,这本质上将所有用户提升为临时管理员。

  • 一个更安全的角度是,在初始安装期间,将更新代理作为服务进行安装。然后,在每个用户帐户上运行的非提升软件将使用某种IPC连接到该服务,该服务以SYSTEM运行,有权更新用户帐户无法访问的位置的文件

这是一个相当复杂的解决方案,本质上是重新发明轮子——MSI安装程序使用服务代理组件来执行升级,而无需UAC提示。

可执行文件和Dlls应始终位于程序文件中。更新程序应该通过UAC处理特权提升。

Chrome也有静默更新程序,整个可执行文件都保存在Users文件夹中。在我的情况下,在Windows7上,它保存在:C:''Users''my account name''AppData''Local''Google 中

您还应该查看Environment。SpecialFolder枚举。

如果你想像Chrome那样把它们放在下

Environment.GetFolderPath(Environment.SpecialFolder.System)
相关文章: