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

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

该应用程序也加载一些.dll

我试图将可执行文件和dll放在应用程序数据文件夹中,但visual studio给我一个关于如何不能让所有用户访问这些文件的警告。

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

我怎么能A)删除警告或B)更好地组织一切?

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

  • 使用GAC。 据我所知,如果您将二进制文件捆绑为数字签名的程序集,则GAC将允许进行静默安装和“升级”。 (在这里,安全性是公钥的一部分,因此在GAC中结束,只要签名,“恶意软件”程序集就不能冒充已签名的程序集)

  • 使用基于MSI的安装程序:同样,初始管理安装后,MSI安装程序将允许将补丁无提示安装到现有的数字签名内容。 这里的安全性是管理员首先给予安装许可的。 已签名的补丁MSI可以被确认来自同一个发布者,所以MSI不需要重新提示权限)。

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

  • 最后(至少),创建自己的文件夹,几乎任何你想要的。 在创建时,从Windows安全的角度来看,软件是新文件夹的所有者,作为所有者,您有隐式权限来调整新文件夹的ACL。 因此,以用户管理员身份运行的初始安装过程(可以成功创建文件夹)可以调整文件夹的ACL,以使“用户”组具有可继承的R / W访问权限。 所有用户随后在文件夹中创建的所有文件都可以被所有用户读取和写入(除了guest(并且你真的不想给guest用户写任何东西)。

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

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

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

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

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

你也应该看看Environment.SpecialFolder枚举。

如果你想做,Chrome会把它们放在下面

 Environment.GetFolderPath(Environment.SpecialFolder.System)