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

时间:2009-11-10 11:10:37

标签: windows-7 windows-vista ntfs

我正在尝试查找一个文件夹,默认情况下,Vista和Windows 7中Users组的成员有权写入,而不提升。

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

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

  

CSIDL _ COMMON _ AP​​PDATA   (FOLDERID_ProgramData)版本5.0。

     

文件系统目录   包含所有的应用程序数据   用户。典型的路径是C:\ Documents   和设置\所有用户\应用程序   数据。此文件夹用于   非用户的应用程序数据   具体。例如,一个应用程序   可以存储拼写检查词典,   剪贴画数据库或其中的日志文件   CSIDL_COMMON_APPDATA文件夹。这个   信息不会漫游而已   任何人都可以使用   计算机。

     

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。很脏,但我们的情况需要。

1 个答案:

答案 0 :(得分:3)

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

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