UAC 和日志文件管理

UAC and log files management

我正在编写一个引用 log4Net 的 WPF .NET 应用程序 (fwk 4.0),并且必须安装在 Windows 7/8/10 64 位 OS 上的 '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)'.

我该怎么做才能应对这种情况?

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

有关如何在 Log4Net 中进行设置的更多详细信息,请参阅此 link: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 下,然后将所有数据安装在上述 2 个文件夹之一下,具体取决于应用程序数据和日志记录是按用户还是按安装.