C# 我可以将文件放在哪里,以便非管理员可以编辑这些文件,所有用户都可以访问这些文件?
我正在开发一个具有静默更新程序的Windows应用程序,因此需要能够覆盖可执行文件 该应用程序还加载一些.dll 我尝试将可执行文件和DLL放在应用程序数据文件夹中,但VisualStudio给了我一个警告,说明所有用户都无法访问这些文件 我尝试将可执行文件放在application data文件夹中,将DLL放在program files文件夹中,但由于无法加载DLL,应用程序崩溃C# 我可以将文件放在哪里,以便非管理员可以编辑这些文件,所有用户都可以访问这些文件?,c#,windows,visual-studio,dll,setup-deployment,C#,Windows,Visual Studio,Dll,Setup Deployment,我正在开发一个具有静默更新程序的Windows应用程序,因此需要能够覆盖可执行文件 该应用程序还加载一些.dll 我尝试将可执行文件和DLL放在应用程序数据文件夹中,但VisualStudio给了我一个警告,说明所有用户都无法访问这些文件 我尝试将可执行文件放在application data文件夹中,将DLL放在program files文件夹中,但由于无法加载DLL,应用程序崩溃 如何才能A)删除警告或B)以更好的方式组织所有内容?可执行文件和DLL应始终放在程序文件中。更新程序应通过UAC
如何才能A)删除警告或B)以更好的方式组织所有内容?可执行文件和DLL应始终放在程序文件中。更新程序应通过UAC处理权限提升。可执行文件和DLL应始终放在程序文件中。更新程序应该通过UAC处理priviledge提升。Chrome也有静默更新程序,整个可执行文件保存在用户文件夹中。 在我的情况下,在windows 7上,它保存在:C:\Users\my account name\AppData\Local\Google
您还应该检查枚举。Chrome也有静默更新程序,整个可执行文件保存在用户文件夹中。 在我的情况下,在windows 7上,它保存在:C:\Users\my account name\AppData\Local\Google
您还应该签出枚举。系统上没有此类文件夹。我的一些想法是:
- 使用GAC。据我所知,如果您将二进制文件打包为数字签名程序集,GAC将允许静默安装和“升级”。(这里的安全性是作为程序集id一部分的公钥所固有的,因此,GAC中的最终结果并不重要,只要已签名,“恶意软件”程序集就不能模拟已签名的程序集)
- 使用基于MSI的安装程序:同样,在初始管理安装后,MSI安装程序将允许对现有数字签名内容静默安装修补程序。在这里,安全性是管理员首先授予安装权限所固有的。可以确认已签名的修补程序MSI来自同一发布者,因此MSI无需重新提示权限)
- 将主二进制文件安装到具有UAC高程的共享位置。将修补程序二进制文件存储在每个用户文件夹中。这可以防止非管理员用户覆盖彼此的文件。有一些潜在的冗余,但那又怎样呢
- 最后,创建你自己的文件夹,几乎在你想要的任何地方。在创建时,从windows安全角度来看,软件是新文件夹的所有者,并且作为所有者,您具有调整新文件夹ACL的隐式权限。因此,以用户或管理员身份运行的初始安装过程可以(在它可以成功创建的文件夹上)调整文件夹的ACL,以授予“用户”组可继承的R/W访问权限。任何用户随后在文件夹中创建的所有文件都可以被所有用户(guest除外)读写(而且您确实不想给guest用户任何写权限)
- 更安全的角度是,在初始安装期间,将更新代理作为服务安装。然后,在每个用户帐户上运行的非升级软件将使用某种IPC连接到该服务,该服务作为系统运行,将有权在用户帐户无权访问的位置更新文件
这是一个相当复杂的解决方案,本质上是重新发明了轮子-MSI安装程序使用服务代理组件执行升级,而无需UAC提示。系统上没有此类文件夹。我的一些想法如下:
- 使用GAC。据我所知,如果您将二进制文件打包为数字签名的程序集,GAC将允许静默安装和“升级”。(这里的安全性是程序集id的一部分公钥固有的,因此,GAC中的内容无关紧要,只要它是经过签名的“恶意软件”程序集无法模拟已签名的程序集)
- 使用基于MSI的安装程序:同样,在初始管理安装后,MSI安装程序将允许对现有数字签名内容静默安装修补程序。在这里,安全性是管理员首先授予安装权限所固有的。可以确认签名的修补程序MSI来自同一发布者,因此MSI不需要重新提示权限)
- 将主二进制文件安装到具有UAC高程的共享位置。将修补程序二进制文件存储在每个用户文件夹中。这可以防止非管理员用户覆盖彼此的文件。有一些潜在的冗余,但那又怎样呢
- 最后,创建你自己的文件夹,几乎在你想要的任何地方。在创建时,从windows安全角度来看,软件是新文件夹的所有者,并且作为所有者,您具有调整新文件夹ACL的隐式权限。因此,以用户或管理员身份运行的初始安装过程可以(在它可以成功创建的文件夹上)调整文件夹的ACL,以授予“用户”组可继承的R/W访问权限。任何用户随后在文件夹中创建的所有文件都可以被所有用户(guest除外)读写(而且您确实不想给guest用户任何写权限)
Environment.GetFolderPath(Environment.SpecialFolder.System)