简体   繁体   中英

How to get the application specific data folder (ProgramData)?

I need to read and write files that contain application specific data, shared between all the users.

I tried to use Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) , but it returns only C:\\ProgramData .

My question is :

Does it exist a system like Path.GetDirectoryName(Application.UserAppDataPath) , which will give me the exact folder to write, according to my application name and version?

Or is ProgramData not the right place to do that.

Thanks.

Does it exist a system like Path.GetDirectoryName(Application.UserAppDataPath), which will give me the exact folder to write, according to my application name and version?

No it doesn't exist, at least when running on Windows 7 (don't know about Windows 8/ WinRT/ Windows Store apps). Feasible solution is just to concat Environment.GetFolderPath(...) output with a custom path for your application. Typically, to reduce chances of clashing, that could be something like YourOrganization\\YourApplication , or YourFullName\\YourApplication , possibly also appending version.

Or is ProgramData not the right place to do that.

That is the right place to store application-wide information on disk. Information related to your application and different for each Windows user logging on the machine should go instead in <User folder>\\AppData\\Roaming\\... , or <User folder>\\AppData\\Local\\... .

Beware : as somebody already mentioned in comments, normally one needs administrator rights in order to work inside C:\\ProgramData... , hence you would need to prepare a setup project that, during install phase, would create the folder inside ProgramData and give the right permissions.

I think CommonApplicationData is exactly what you're looking for, as it's the global folder for all applications which are not bound to a user.

var commonpath = GetFolderPath(SpecialFolder.CommonApplicationData);
var path = Path.Combine(commonpath, "YourAppName\\YourApp.exe");
try { 
    Process.Start(path);
    // or put data there or whatever
} 
catch (Exception ex)
{
    MessageBox.Show(path);
}

There's also SpecialFolder.LocalApplicationData for user-bound data.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM