带有 .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 的应用程序创建带有自动建议的文本框?

如何在 vis.js 中使用带有点击事件的修饰符?

带有 Angular 6 的 Asp.Net Core 2.1 中的 Windows 身份验证 - Chrome 连续登录提示

.net 安装程序、自定义操作、停止和卸载 windows 服务