c# - 在某处写入日志和数据的正确方法

标签 c# windows

我们有一个 Windows 应用程序,它可以安装在程序文件中,也可以从其他地方复制和使用。此外,客户经常希望在同一台机器上使用多个版本的应用程序(长话短说:客户有 N 个项目,每个项目都处于不同的阶段,因此每个项目都需要我们应用程序的不同版本。客户群是我们应用程序之上的自己的项目/框架)。

我们开始看到客户提示运行我们的应用程序需要管理员权限,因为:

  • 我们将文本日志写入本地文件夹。我们也使用 Windows 事件作为日志,但需要文本日志。
  • 我们将数据库缓存写入本地文件夹。数据库缓存应尽可能在应用程序运行之间持续存在。
  • 我们还编写了一些其他文件,例如仅在应用运行生命周期中需要的固件,并且可以在应用关闭时删除。

我们决定我们应该为此做点什么。也许我们应该将所有这些内容写入 %AppData%/[someFolder]。问题是客户可能有我们应用程序的多个不同实例,他们应该有单独的日志/缓存。客户甚至可能安装了两次相同的版本,因此我们不能使用版本作为 key 。

目前的想法是使用 Assembly.GetEntryAssembly().Location 作为键,因此写入的路径将类似于 $"%AppData%\{Path.GetDirectoryName(Assembly. GetEntryAssembly().Location)}”。这可能会奏效,但看起来很奇怪而且很老套。

有没有更好的方法来管理这个?我也在考虑向每个应用程序实例发出一个 GUID 并改为使用它,但我不确定如何正确地做到这一点。

最佳答案

写入 c:\Program FilesC:\Company Name 都不是好主意,并且与 Windows 最佳实践相冲突。写入程序文件需要管理员权限是有原因的!写入 C:\Company Name 是可能的,但只是出于向后兼容的原因,并且已经完全过时了。 我的建议是写入Appdata,无论是.\Local.\LocalLow还是.\Roaming是您的选择,但有最佳实践 ( read this post ) 您还可以使用 %Programdata%\YourFolderName

为了使您的程序实例彼此分离:采用任一进程 ID(它们在任何给定时间都是唯一的,但不会随时间推移),或使用随机数。 GUID 是随机数(或随机字符串)的一个示例,但如果 GUID 对您来说很难看,4 字节(long)随机数也可以完成这项工作。

关于c# - 在某处写入日志和数据的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42668900/

相关文章:

c++ - DEBUG : During Hook procedure call , 它显示 vsjitdebugger.exe 错误

c# - Q深度学习算法不工作

python - 找不到 Spark jars 目录。在运行这个程序之前你需要构建 Spark

c# - 从 .NET 应用程序登录 Windows

php - 在 PHP-FPM Docker 容器中配置 Xdebug

c++ - 我如何检索连接到服务器的硬盘信息?示例 C/C 代码?

c# - Telerik RadInputManager 与 RadGrid 集成

c# - 如何将值添加到 Sharepoint 中的查找字段?

c# - 从 C# 调用包含指针的 Delphi DLL 结构不起作用

c# - 有效地等待一个或多个资源可用