2011-10-16 173 views
0

我有Winforms應用程序,必須在使用過程中創建寫入某個配置文件。一旦我使用調試模式,這個文件可以創建並寫入它,但一旦我創建安裝項目,並實際安裝應用程序我無法訪問以下例外。System.UnauthorizedAccessException在應用程序文件夾中創建文件時

配置文件位於同一目錄下的程序(在程序文件)

代碼我使用的讀/寫操作。

public static string[] GetDefaultConfigFile(string path) 
{ 
    string[] res = {}; 
    if (File.Exists(GetInternalFileName(path))) 
    { 
     using (StreamReader tr = new StreamReader(GetInternalFileName(path))) 
     { 
      res = tr.ReadToEnd().Split(';'); 
     } 
    } 
    return res; 
} 

public static void SaveDefaultConfigFile(string fileName, string path) 
{ 
    using (var tw = new StreamWriter(GetInternalFileName(path))) 
    { 
     tw.Write(fileName); 
     tw.Close(); 
    } 
} 

private static string GetInternalFileName(string path) 
{ 
    return path + "\\setup.config"; 
} 

回答

1

也許用來運行這段代碼的帳戶沒有足夠的權限寫入到指定的文件夾(Program Files)。如果您在Windows 7或Vista下運行,則標準用戶無權寫入此文件夾。在這種情況下,您可以使用用戶specific folderc:\users\username來存儲配置設置。

我也將簡化:

public static string[] GetDefaultConfigFile(string path) 
{ 
    return File.ReadAllText(path).Split(';'); 
} 

public static void SaveDefaultConfigFile(string fileName, string path) 
{ 
    File.WriteAllText(path, fileName); 
} 

private static string GetInternalFileName(string path) 
{ 
    return Path.Combine(path, "setup.config"); 
} 
+0

謝謝你,有沒有什麼辦法來強制應用程序以啓動具有管理員權限? – eugeneK

+0

@eugeneK,是的,當您運行應用程序時,右鍵單擊可執行文件並選擇以管理員身份運行。或者在快捷方式的屬性中,我認爲在兼容性選項卡中有一個複選框,您可以強制此快捷方式始終以管理員身份運行。在這種情況下,每次運行快捷方式時都會提示用戶輸入管理員密碼。 –

+0

我沒有以此管理員身份運行應用程序。此外,在nLog成功寫入日誌的應用程序文件夾內有一個文件夾。 – eugeneK

相關問題