2013-02-22 36 views
1

我有一個SQL Server CE 4.0(SDF)文件,位於用戶應用程序數據文件夾下(因爲由於Win7 UAC,如果它位於\ Programs Files \文件夾中,則無法修改該數據庫。但問題仍然是我需要現在(安裝時)修改.EXE.CONFIG文件(ConnectionString)以指向數據庫的新路徑,但顯然,我無法訪問修改\ Program Files \文件夾中的.EXE.CONFIG文件。 。使用Windows7修改.EXE.CONFIG文件中的ConnectionString?

那麼人們如何解決這個問題呢? 可以部署.exe.config文件與該用戶Application Data文件夾以及與SDF文件?如果沒有怎麼辦?我能不敢相信你需要授予特殊訪問權限到\ Program Files \ Application文件夾以便能夠完全訪問...

我正在使用VS2010並使用一個標準的部署項目(MSI),我也沒有看到將EXE部署在另一個地方.EXE.CONFIG(可以這樣做嗎?這是正確的解決方案?)

感謝,

回答

1

使用連接字符串中的%APPDATA%變量,而您將不必修改配置文件。這比硬編碼包含用戶名的路徑更靈活,因爲它將允許計算機的所有用戶使用您的程序並擁有自己的.sdf文件。

然而,environment variables are not automatically expanded in .NET,所以你需要使用Environment.ExpandEnvironmentVariable方法去執行:

// Example appSetting element: 
// <add key="examplePath" value="%APPDATA%\example.txt" /> 

string path = System.Configuration.ConfigurationManager.AppSettings["examplePath"].ToString(); 
path = Environment.ExpandEnvironmentVariables(path); 
System.IO.File.WriteAllText(path, "foobar"); 
+0

Odly足夠似乎不工作,它保持這樣(沒有解決)...我的解決方案是在代碼中(初始化)讀取連接字符串,如果您發現%APPDATA%然後用Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)替換它(字符串替換) – JSchwartz 2013-02-23 01:33:29

+0

@JSchwartz感謝您指出!我發表了自己的答案,沒有寫代碼來驗證它,但我剛剛彌補了這一點,學到了一些新的東西並編輯了答案。 – 2013-02-23 11:31:50