【问题标题】:File Security on Windows Vista with .NET Installer带有 .NET 安装程序的 Windows Vista 上的文件安全性
【发布时间】:2010-09-22 16:25:43
【问题描述】:

我正在尝试编写一个可以在 Windows Vista 和 XP 上运行的安装程序(通过创建一个 .vdproj)。我发现的唯一一件事是,当我尝试在 Vista 上运行它时,安装程​​序中包含的文件以用户组的只读权限安装。这是一个问题,因为应用程序需要从这些文件中读取/写入。我能够让它工作的唯一方法是“以管理员身份运行”或实际更改权限。有谁知道如何使这些文件对任何人开放写?谢谢。

【问题讨论】:

    标签: .net windows-vista installation file-permissions


    【解决方案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 应用程序中获取这些文件夹的值?
    猜你喜欢
    • 1970-01-01
    • 2010-12-27
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多