【问题标题】:UAC and log files managementUAC 和日志文件管理
【发布时间】:2016-03-09 16:10:53
【问题描述】:

我正在编写一个 WPF .NET 应用程序 (fwk 4.0),它引用 log4Net 并且必须安装在 Windows 7/8/10 64 位操作系统的“Program Files(x86)”目录中。

应用程序创建的应用程序日志是在“Program Files(x86)”的安装子目录中创建的.txt文件

此应用程序还用于 SQL Server CE 4.0 上的同一子目录中。

C:\Program Files(x86)\MYAPP\APP1\APP1.txt

C:\Program Files(x86)\MYAPP\APP1\CEDatabase.sdf

应用程序由本地管理员安装。

要启动应用程序,UAC 会提示标准用户使用提升的访问令牌(管理员权限)启动以运行应用程序,因为否则它不会启动(我认为 ACL 未被授予创建和写入日志)。

WPF 应用程序构建不包含应用程序清单。

我的客户对标准用户无法在没有 UAC 提升的情况下启动应用程序这一事实感到沮丧。此外,它还想继续安装在“Program Files (x86)”中。

我可以做些什么来处理这种情况?

【问题讨论】:

    标签: wpf manifest uac trust


    【解决方案1】:

    我强烈建议不要将日志文件写入您安装应用程序的同一位置,而是写入您可以通过环境变量访问的标准公共位置之一。 p>

    有关如何在 Log4Net 中设置的更多详细信息,请参阅此链接:How to specify common application data folder for log4net?

    避免 UAC 限制的两个常用日志位置是: CommonApplicationData (https://msdn.microsoft.com/en-us/library/windows/desktop/aa367992(v=vs.85).aspx),这是所有用户都可以写入的位置,因此,如果您想要一个通用的日志记录位置,而不管谁登录到 Windows 并运行您的应用程序,您可能想要使用它。

    LocalAppData (https://msdn.microsoft.com/en-us/library/windows/desktop/aa369768(v=vs.85).aspx) 这是为您当前登录的用户指定的位置。这将允许您将来自不同 Windows 用户的日志文件彼此分开。

    我不确定您是否会在写入 SQL Server CE 数据库时遇到同样的问题。我过去使用 UAC 所遵循的模式是将所有静态文件安装在 Program Files 下,然后将所有数据安装在上述两个文件夹之一下,具体取决于应用程序数据和日志记录是按用户还是按安装.

    【讨论】:

    • 非常感谢您的建议。我将实现您提倡的日志文件 (CommonAppData) 或 (LocalAppData)。在实施您的解决方案之前,我会犹豫将您的回复标记为 Answser,但一旦完成,我一定会回来标记它。再次感谢您的帮助!
    • 它非常适用于 log4Net 文件。如果它对其他人有帮助,我还会添加将我的 SQL CE 4.0 .sdf 文件安装到 CommonAppData 文件夹,以便在非提升的用户进程下调用时建立 CE 连接。再次感谢,
    猜你喜欢
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 2023-04-08
    • 1970-01-01
    • 2013-05-28
    相关资源
    最近更新 更多