什么是在Windows上存储应用程序运行时数据的正确文件夹?

如果我有一个应用程序需要在运行时将一些数据存储到文件系统(比如SQLite数据库或caching文件),那么存储它的正确文件夹是什么?

在* nix它将在/var ,这是直接的,但在Windows上我似乎无法find一个适当的build议。

显然这不是Program Files因为应用程序在运行时没有写入权限。 这显然不是在任何系统文件夹,如Windows

如果它是一个用户运行的应用程序,那么%APPDATA%看起来就像是正确的地方,但是如果应用程序是像Network Service一样运行的Network Service (例如,运行在IIS下生成文件的ASP.Net应用程序)呢?

内置的服务帐户实际上具有您可以使用的“应用程序数据”文件夹:

  • C:\Windows\ServiceProfiles\LocalService\AppData
  • C:\Windows\ServiceProfiles\NetworkService\AppData
  • C:\Windows\System32\config\systemprofile\AppData

但是,这意味着,如果更改服务运行的帐户,数据将不可用,而且还会使系统管理员难以找到。

程序数据文件夹是一个更好的选择,在Windows的现代版本中通常可以找到该文件夹

  • C:\ProgramData

在.NET中,您可以使用Environment.GetFolderPath检索Program Data文件夹的路径,

 System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) 

您应该在程序数据文件夹中创建一个具有适当名称的文件夹,例如您的应用程序和/或公司的名称。 根据上下文,您可能还需要更改子文件夹的权限。

在C#中,你可以使用

 System.IO.Path.GetTempPath() 

这给你的路径:

 C:\Documents and Settings\User\Local Settings\Temp\ 

对于不temproray文件,你可以使用:

 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

希望这就是你想要的