【问题标题】:Vista and ProgramDataVista 和 ProgramData
【发布时间】:2010-09-12 23:58:24
【问题描述】:

存储对每个用户都相同但必须对程序可写的程序数据文件的正确位置是什么? MS Windows XP 上的等效位置是什么?我读过 C:\ProgramData 在普通用户安装后不可写。真的吗?如何使用 Platform SDK 以编程方式检索该目录?

【问题讨论】:

    标签: windows-vista directory shared programdata


    【解决方案1】:

    SHGetFolderPath(),CSIDL 为 CSIDL_COMMON_APPDATA

    阅读更多http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx

    如果需要批处理文件中的路径,也可以使用%ALLUSERSPROFILE% 环境变量。

    【讨论】:

    • 我相信这实际上是 %ALLUSERSPROFILE%,带有一个 S
    【解决方案2】:

    这里有不同选项的精彩总结:http://blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx

    我应该在哪里写程序数据 而不是程序文件?

    常见的应用程序代码更新是 这个:“我的应用程序曾经写 文件到程序文件。感觉就像 放置它的好地方 其他。它上面有我的应用程序的名称 已经有了,因为我的用户是 管理员,它工作得很好。但现在我明白了 这可能不是一个好地方 像我曾经想的那样坚持, 因为有了 UAC 甚至管理员 以标准用户权限运行 大多数时候。那么,我应该在哪里 代替我的文件?”

    【讨论】:

      【解决方案3】:

      实际上SHGetFolderPath 已被弃用。

      应该改用SHGetKnownFolderPath

      【讨论】:

      • 如果我使用 SHGetKnownFolderPath 我的软件只能在 Windows Vista 下运行。 SHGetFolderPath 在 Windows 2000 和 Vista 上也可以使用。
      • @frast,是的,但是您可以检查 SHGetKnowFolderPath 的可用性并在退出时使用它。 (使用 LoadProc 或其他任何名称......)那么您的应用程序将是面向未来的,并且可以在删除了 SHGetFolderPath 的 Windows 版本以及 Windows 2000 上运行。
      • @Amigable 我会这样做,但我会等到看到不支持 SHGetFolderPath 的 Windows 版本。
      • @frast,那时很可能永远不会,因为微软经常将旧界面保留长时间时间。 :)
      • @Amigable Right。稳定的界面是一件好事,我懒得使用 Windows Vista 的所有新优点 :)
      【解决方案4】:

      你可以使用:

      CString strPath;
      ::SHGetSpecialFolderPath(NULL, strPath.GetBuffer(1024), CSIDL_COMMON_APPDATA, FALSE);
      

      【讨论】:

        【解决方案5】:

        Raymond Chen's article on this specific question

        简而言之,您要求的是安全漏洞

        【讨论】:

        • 管理员不会使用该应用程序,并且可以登录计算机的每个人都在我们正在处理的公司中受到信任。因此,在用户之间共享数据不是安全问题。在 Vista 上可以共享公共文件夹中的图片和电影。节目也应该有这个。
        猜你喜欢
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-23
        • 2013-04-22
        • 2011-05-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多