【问题标题】:Unable to Create or Write to a file as standard user无法以标准用户身份创建或写入文件
【发布时间】:2010-12-20 06:55:50
【问题描述】:

我的应用程序在连接或断开服务器时会创建一个日志文件。这在赢得 XP 时效果很好。

我在 Vista 和 Win 7 中以管理员身份运行它时没有问题。但如果我在 Vista 或 Win7 中以标准用户身份运行它,则无法创建日志文件,我知道这是针对 UAC 的。

但是我怎样才能绕过这种情况,以便我的应用程序以 admin 身份运行。我是否需要在安装我的应用程序时添加任何注册表项,以便它始终以管理员身份运行。

【问题讨论】:

    标签: c++ windows-7 windows-vista uac


    【解决方案1】:

    如果你真的想要,你可以add a manifest,这会导致你的应用程序在启动时需要 UAC 提升,但通常这不是你应该做的。

    更有可能的是,你正在写一条你不应该写的路。用户模式应用程序应该只写入当前用户文件夹或C:\Users\Public 文件夹,而日志之类的内容应该进入C:\Users\Current User Name\Application Data\Your Program Name\。要获取 ApplicationData 路径,请使用 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)。或者,如果您想让所有用户共享文件,请使用Environment.SpecialFolder.CommonApplicationData

    【讨论】:

    • 但我不希望不同 Windows 用户的日志和配置不同(主要是日志文件)
    • 啊,在这种情况下,您需要 System.Environment.SpecialFolder.CommonApplicationData,这是一个所有标准用户都应该可以写入的位置。请记住,由于理论上多个用户可以同时运行您的应用程序(因为 Win7 具有用户切换功能),您需要允许多个编写器(请参阅:FileShare Enumeration)并处理并发写入的可能性,或者您需要打开并为每次写入关闭文件(可能会影响性能)。
    • 您真的很希望您的应用以标准用户身份运行,Paul 给了您一些极好的建议
    • 但我想在安装路径(C:\program files\myapp\)中创建/写入文件,我该怎么做?我的应用程序是 C#。
    • @Sharique,如果你这样做,你就是邪恶的(你没有遵循最佳实践)。但如果你真的想要,请点击“添加清单”链接 (community.bartdesmet.net/blogs/bart/archive/2006/10/28/…2D00-Demand-UAC-elevation-for-an-application-by-adding-a-manifest-using- mt.exe.aspx)在我的回答中,它将告诉您如何使您的程序在 Vista 和 Win7 上需要管理权限。一旦你以管理员身份运行,你就可以在任何地方编写/创建文件(包括 C:\Program Files\...)
    猜你喜欢
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 2022-09-27
    • 1970-01-01
    相关资源
    最近更新 更多