2

我有一个用 C# 编写的应用程序,我正在寻求将一些信息写入隐藏的 ProgramData,以便从应用程序的前端和后端访问相同的连接字符串。

我正在使用路径变量访问目录,如下所示:

private bool ProgramDataWriteFile(string contentToWrite)
        {
            try
            {

                string strProgramDataPath = "%PROGRAMDATA%";
                string directoryPath = Environment.ExpandEnvironmentVariables(strProgramDataPath) + "\\MyApp\\";
                string path = Environment.ExpandEnvironmentVariables(strProgramDataPath)+"\\MyApp\\ConnectionInfo.txt";

                if (Directory.Exists(directoryPath))
                {
                    System.IO.StreamWriter file = new System.IO.StreamWriter(path);
                    file.Write(contentToWrite);
                    file.Close();
                }
                else
                {
                    Directory.CreateDirectory(directoryPath);
                    System.IO.StreamWriter file = new System.IO.StreamWriter(path);
                    file.Write(contentToWrite);
                    file.Close();
                }

                return true;
            }
            catch (Exception e)
            {
            }
            return false;
        }

这似乎工作正常。但是,我的问题是,当我使用此路径变量时:%AllUsersProfile%(%PROGRAMDATA%) 相反,它扩展为非法(和冗余)文件路径:C:\ProgramData(C:\ProgramData)\ 但是,我认为后一个路径变量是正确的全名。我只是使用不正确吗?我需要确保所有用户都可以访问此连接信息,仅使用%PROGRAMDATA%允许吗?我正在使用 Windows 7,以防万一。

4

1 回答 1

6

这里

FOLDERID_ProgramData / System.Environment.SpecialFolder.CommonApplicationData

用户永远不想在资源管理器中浏览此处,并且此处更改的设置会影响计算机上的每个用户。默认位置是 %systemdrive%\ProgramData,它是 Windows Vista 安装上的隐藏文件夹。您需要在安装时创建目录并设置所需的 ACL。

因此,只需使用%PROGRAMDATA%,或者更好的是:

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
于 2012-12-04T20:32:49.680 回答