Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以将文件放在哪里,以便非管理员可以编辑这些文件,所有用户都可以访问这些文件?_C#_Windows_Visual Studio_Dll_Setup Deployment - Fatal编程技术网

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

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

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

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

我尝试将可执行文件和DLL放在应用程序数据文件夹中,但VisualStudio给了我一个警告,说明所有用户都无法访问这些文件

我尝试将可执行文件放在application data文件夹中,将DLL放在program files文件夹中,但由于无法加载DLL,应用程序崩溃


如何才能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用户任何写权限)

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

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

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

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

  • 使用GAC。据我所知,如果您将二进制文件打包为数字签名的程序集,GAC将允许静默安装和“升级”。(这里的安全性是程序集id的一部分公钥固有的,因此,GAC中的内容无关紧要,只要它是经过签名的“恶意软件”程序集无法模拟已签名的程序集)

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

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

  • 最后,创建你自己的文件夹,几乎在你想要的任何地方。在创建时,从windows安全角度来看,软件是新文件夹的所有者,并且作为所有者,您具有调整新文件夹ACL的隐式权限。因此,以用户或管理员身份运行的初始安装过程可以(在它可以成功创建的文件夹上)调整文件夹的ACL,以授予“用户”组可继承的R/W访问权限。任何用户随后在文件夹中创建的所有文件都可以被所有用户(guest除外)读写(而且您确实不想给guest用户任何写权限)

最后一个选项是安全问题,因为普通用户不能影响其他用户的执行环境。“用户R/W访问”意味着普通用户可能安装特洛伊木马或以其他方式篡改其他用户
Environment.GetFolderPath(Environment.SpecialFolder.System)