带有 .NET 安装程序的 Windows Vista 上的文件安全性
Posted
技术标签:
【中文标题】带有 .NET 安装程序的 Windows Vista 上的文件安全性【英文标题】:File Security on Windows Vista with .NET Installer 【发布时间】:2010-09-22 16:25:43 【问题描述】:我正在尝试编写一个可以在 Windows Vista 和 XP 上运行的安装程序(通过创建一个 .vdproj)。我发现的唯一一件事是,当我尝试在 Vista 上运行它时,安装程序中包含的文件以用户组的只读权限安装。这是一个问题,因为应用程序需要从这些文件中读取/写入。我能够让它工作的唯一方法是“以管理员身份运行”或实际更改权限。有谁知道如何使这些文件对任何人开放写?谢谢。
【问题讨论】:
【参考方案1】:Program Files 文件夹及其内容对于标准用户是只读的。这是设计使然,您会发现在 Windows XP 上也是如此。只是在 windows xp 上,很多人一直以管理员权限运行,您可能会逃脱用它。如果您想将您的应用分发到商业环境中,您很快就会发现它也无法在 XP 上运行。
如果标准用户需要写入权限,解决方案是不要将文件放在程序的可执行文件夹中。而是将它们放在 Application Data 文件夹中。对于大多数 xp 机器,这将在这里: C:\Documents And Settings\All Users\Application Data\Your App
但是,情况并非总是如此,无论如何它在 Vista 上略有不同,因此请确保您通过编程环境提供的机制获得该路径。在 .Net 中,您可以使用 Environment.GetFolderPath()
函数。
【讨论】:
.NET 应用程序的“提供的机制”是什么? Joel,文件夹 ..\All Users\Application 对于标准用户也是只读的。建议在安装时添加一个可写的子文件夹。【参考方案2】:为乔尔的回答添加一些细节:
在 Win2K 和 XP 中,CSIDL_APPDATA 应该用于每个用户,漫游。在 Vista 中,这是 FOLDERID_RoamingAppData。
在 Win2K 和 XP 中,CSIDL_LOCAL_APPDATA 应该用于每个用户,非漫游。在 Vista 中,这是 FOLDERID_LocalAppData。
在 Win2K 和 XP 中,CSIDL_COMMON_APPDATA 应该用于per-machine,即应用程序的所有用户。在 Vista 中,这是 FOLDERID_ProgramData。
NB 这最后一个文件夹通常对非管理员非高级用户是只读的。推荐的解决方案是在应用安装期间创建一个读/写子文件夹。
编辑:要使用托管代码在特定机器上获取这些常量的实际位置,请尝试 System.Environment.GetFolderPath 使用定义的常量here。另一个有用的链接是here。
【讨论】:
如何从 .NET 应用程序中获取这些文件夹的值?以上是关于带有 .NET 安装程序的 Windows Vista 上的文件安全性的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 7 上带有 websockets 的 asp.net 5 Web 应用程序
带有VS2012的Windows 8上的msbuild.exe位置
如何在 VB.NET 中为基于 Windows 的应用程序创建带有自动建议的文本框?
带有 Angular 6 的 Asp.Net Core 2.1 中的 Windows 身份验证 - Chrome 连续登录提示