我在哪里可以放置文件,以便非管理员编辑并由所有用户访问?

时间:2011-05-25 04:33:37

标签: c# windows visual-studio dll setup-deployment

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

该应用程序还会加载一些.dll

我尝试将可执行文件和dll放在应用程序数据文件夹中,但是visual studio会向我发出警告,说明所有用户都无法访问这些文件。

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

我怎样才能A)删除警告或B)以更好的方式组织所有事情?

4 个答案:

答案 0 :(得分:0)

可执行文件和Dll应该总是进入程序文件。更新程序应通过UAC处理特权提升。

答案 1 :(得分:0)

Chrome也有静默更新程序,整个可执行文件都保存在“用户”文件夹中。 就我而言,在Windows 7上,它保存在:C:\ Users \我的帐户名\ AppData \ Local \ Google

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

答案 2 :(得分:0)

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

  • 使用GAC。据我所知,如果您将二进制文件捆绑为数字签名程序集,GAC将允许静默安装和“升级”。 (这里的安全性是公钥中固有的,它是程序集ID的一部分,因此无论GAC中的内容是什么都没关系,只要它已签名,“恶意软件”程序集就不能冒充已签名的程序集)< / p>

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

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

  • 最后(至少),创建自己的文件夹,几乎无论你想要什么。在创建时,从Windows安全的角度来看,软件是新文件夹的所有者,并且作为所有者,您具有调整新文件夹的ACL的隐式权限。因此,作为用户管理员运行的初始安装过程可以(在可以成功创建的文件夹上)调整文件夹的ACL,以便为“Users”组提供可继承的R / W访问权限。然后,任何用户随后在文件夹中创建的所有文件都可以被所有用户读取和写入(guest虚拟机除外(并且您真的不想让Guest用户对任何内容进行写访问)。

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

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

这是一个非常复杂的解决方案,基本上是重新发明轮子 - MSI安装程序使用服务代理组件执行升级,没有UAC提示。

答案 3 :(得分:0)

如果您想这样做,Chrome确实将它们置于

之下
Environment.GetFolderPath(Environment.SpecialFolder.System)
相关问题