代码之家  ›  专栏  ›  技术社区  ›  Hemant

放置应用程序数据的最佳位置?[副本]

  •  7
  • Hemant  · 技术社区  · 16 年前


    VS2008 Setup Project: Shared (By All Users) Application Data Files?

    请有人建议什么是放置应用程序数据的最佳位置(路径),所有用户都应该可以访问和编辑这些数据。

    这是考虑到Windows XP和Windows Vista,我希望上述路径的任何文件中的更改都不会触发UAC!

    10 回复  |  直到 7 年前
        1
  •  5
  •   Alex B    16 年前

    纯Win API: SHGetFolderPath 具有 CSIDL_COMMON_APPDATA 作为文件夹类型。

        3
  •  2
  •   JC.    16 年前
    Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
    

    应解析为C:\Documents and Settings\All Users\Application Data\

    从那里,创建子文件夹,例如MyCompany\MyApp

        4
  •  2
  •   DotNET    16 年前

    还要确保已关闭应用程序的虚拟化

        5
  •  1
  •   tloach    16 年前

    %ALLUSERSPROFILE%\Application Data\App
    这可能是所有用户无需提升权限即可访问的唯一目录。

        6
  •  1
  •   Timothy Carter    16 年前

    如果您使用的是.NET,Application.CommonAppDataPath应该可以工作。

        7
  •  1
  •   Paul Nearney    16 年前

    如果用户不打算直接修改数据,而只由应用程序修改,那么IsolatedStorage呢- http://msdn.microsoft.com/en-us/library/3ak841sy(VS.80).aspx

        8
  •  1
  •   ravenspoint    16 年前

    跳棋提供了在C或C++中实现这一点的重要线索。因此,我对他的答案投了赞成票。

    以下是他遗漏的细节:

    // assumes
    // company is a pointer to a character sting containing company name
    // appname is a pointer to a character string containing application name
    // fname   is a pointer to a character string cintaining name of file to be created
    
    #include <shlobj.h>   // for SHGetFolderPath
    #include <direct.h>   // for _mkdir
    
    char path[MAX_PATH];
    SHGetFolderPath(NULL,CSIDL_COMMON_APPDATA,NULL,NULL,path);
    strcat(path,"/");
    strcat(path,company);
    _mkdir(path);
    strcat(path,"/");
    strcat(path,appname);
    _mkdir(path);
    strcat(path,"/");
    strcat(path,fname);
    
    // path is now a character string which can passed to fopen
    
        9
  •  0
  •   tuinstoel    16 年前

        10
  •  0
  •   Doug Kavendek    13 年前

    对于Vista和更高版本,微软似乎正在推动使用 SHGetKnownFolderPath() 而不是 SHGetFolderPath() . 选择要从中请求的文件夹 list of KNOWNFOLDERIDs . 根据这里的答案,你想要的等价物可能是 FOLDERID_ProgramData . 我意识到这个问题已经很老了,但我想出于存档的目的。。