windows-7 - Vista/Windows 7 下通用的世界可写应用程序数据文件夹

标签 windows-7 windows-vista ntfs

我试图找到一个文件夹,默认情况下,Vista 和 Windows 7 中用户组的成员有权写入,无需提升。

这将用于存储公共(public)数据(数据库和定期更新的文档包),需要所有用户共享和写入..

我以为我找到了 CSIDL_COMMON_APPDATA,它在 Vista 上解析为 c:\ProgramData,但是在测试中我们发现当机器加入域时,用户组的成员只有读取/执行权限。这似乎与文档相矛盾:

CSIDL _ COMMON _ APPDATA (FOLDERID_ProgramData) Version 5.0.

The file system directory that contains application data for all users. A typical path is C:\Documents and Settings\All Users\Application Data. This folder is used for application data that is not user specific. For example, an application can store a spell-check dictionary, a database of clip art, or a log file in the CSIDL_COMMON_APPDATA folder. This information will not roam and is available to anyone using the computer.

http://msdn.microsoft.com/en-us/library/bb762494(VS.85).aspx

我不想使用文档文件夹(如 CSIDL_COMMON_DOCUMENTS),因为这些文件不应该对用户特别可见。

感兴趣的是我用来将 CSIDL 值解析为路径的代码。

public enum CSIDL : int
{
  COMMON_APPDATA = 0x0023
  // etc
}

public static class Folders
{
  [DllImport("shell32.dll")]
  static extern bool SHGetSpecialFolderPath(IntPtr hwndOwner, [Out]StringBuilder lpszPath, int nFolder, bool fCreate);

  public static string GetCsidlValue(CSIDL csidl)
  {
    StringBuilder path = new StringBuilder(260);
    SHGetSpecialFolderPath(IntPtr.Zero, path, (int)csidl, false);
    return path.ToString();
  }

  public static string GetCommonAppDataFolder()
  {
    return GetCsidlValue(CSIDL.COMMON_APPDATA);
  }
}

有什么建议吗?

编辑:询问我们为什么不使用 System.Environment.SpecialFolder。我们使用未在该枚举中定义的文件夹 (COMMON_DOCUMENTS - 0x002e):

public enum SpecialFolder
{
  ApplicationData = 0x1a,
  CommonApplicationData = 0x23,
  CommonProgramFiles = 0x2b,
  Cookies = 0x21,
  Desktop = 0,
  DesktopDirectory = 0x10,
  Favorites = 6,
  History = 0x22,
  InternetCache = 0x20,
  LocalApplicationData = 0x1c,
  MyComputer = 0x11,
  MyDocuments = 5,
  MyMusic = 13,
  MyPictures = 0x27,
  Personal = 5,
  ProgramFiles = 0x26,
  Programs = 2,
  Recent = 8,
  SendTo = 9,
  StartMenu = 11,
  Startup = 7,
  System = 0x25,
  Templates = 0x15
}

编辑:我想我问了一个无法回答的问题。

http://blogs.msdn.com/oldnewthing/archive/2004/11/22/267890.aspx

这似乎暗示这是故意不可能的。然后,我回到使用提升的 CLI 应用程序来更改我们文件夹上的 ACL。脏,但我们的情况需要。

最佳答案

http://blogs.msdn.com/oldnewthing/archive/2004/11/22/267890.aspx

这似乎暗示这是故意不可能的。然后,我回到使用提升的 CLI 应用程序来更改我们文件夹上的 ACL。脏,但我们的情况需要。

关于windows-7 - Vista/Windows 7 下通用的世界可写应用程序数据文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1707195/

相关文章:

Windows 7 上 MySQL 5.7.18 的 MySQL 安装程序卡住

.net - 使用 Reflector,为什么我看不到嵌入在 .NET 应用程序中的 app.manifest?

c++ - 使用 ADS(备用数据流)隐藏可执行文件

Delphi 表单图标在 Windows 7 的任务栏上模糊(启用 MainFormOnTaskbar)

windows-7 - 在 Windows 7 中使用 Open MPI 和 CUDA

c++ - XP和Vista之间使用winsock API的UDP组播区别

c++ - ERROR_ACCESS_DENIED 设置文件所有者

c - 在C中用什么技术获得NTFS访问权限?

java - 使用Java获取Windows系统温度

java - 是否有适用于 Vista 和 Freebsd 的 Javax.comm 第三方解决方案?