2012-12-04 65 views
2

我有一個用C#編寫的應用程序,我正在尋求將一些信息寫入隱藏的ProgramData,以便從應用程序的前端訪問相同的連接字符串和後端。%AllUsersProfile%(%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。

+0

當我在Windows Explorer中粘貼%PROGRAMDATA%我得到一個單一的路徑C:\ ProgramData我使用Windows 7以及..你期望看到什麼..? – MethodMan

回答

4

here

FOLDERID_ProgramData/System.Environment.SpecialFolder.CommonApplicationData

用戶將再也不想在這裏瀏覽在資源管理器,設置在這裏改變應該不會影響機器上的每個用戶。在Windows Vista安裝中,默認位置是%systemdrive%\ ProgramData,它是一個隱藏文件夾。您需要在安裝時創建您的目錄並設置您需要的ACL。

所以,只要使用%PROGRAMDATA%,或者更好的是:

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) 
+0

我似乎沒有訪問它所需的權限問題,但如果是,ACL是我可以通過編程控制的東西嗎? – Christian

相關問題