2014-01-14 70 views
0

我創建了一個具有ini文件和db.mdb(訪問)的應用程序,它將一些圖像從web下載到應用程序附近的文件夾。爲什麼需要UAC更改文件?

嗯,我用Setup Factory Software創建了一個安裝文件。一切似乎相當好,我開始我的應用程序,它不改變ini文件的值,不下載圖像,並沒有插入任何recort到數據庫。

這裏是我的應用程序,C的路徑:\ Program Files文件(x86)的\ XXXXXXX

這裏instering行代碼數據庫

public void AddChannels(List<MediaChannel> list) 
{ 

string connectionString = "Provider=Microsoft.Jet.OleDb.4.0; Data Source=data\\db.mdb;"; 
try 
{ 
    using (OleDbConnection connection = new OleDbConnection(connectionString)) 
    { 
    OleDbCommand cmd = new OleDbCommand(); 
    cmd.Connection = connection; 

    connection.Open(); 


    int tmp1; 
    string tmpstr; 
    foreach (var mediaChannel in list) 
    { 
    tmp1 = mediaChannel.ImagePath.LastIndexOf('/'); 
    tmpstr = mediaChannel.ImagePath.Substring(tmp1+ 1, mediaChannel.ImagePath.Length - tmp1 - 1); 

    cmd.CommandText = "Insert Into Channels(ChannelName,CategoryName,Url,ImagePath,ChannelType) values(@ChannelName,@CategoryName,@Url,@ImagePath,@ChannelType)"; 
     cmd.Parameters.AddWithValue("@ChannelName", mediaChannel.Name); 
     cmd.Parameters.AddWithValue("@CategoryName", mediaChannel.CategoryName); 
     cmd.Parameters.AddWithValue("@Url", mediaChannel.Url); 
     cmd.Parameters.AddWithValue("@ImagePath", tmpstr); 
     cmd.Parameters.AddWithValue("@ChannelType", (int)mediaChannel.ChannelType); 
     cmd.ExecuteNonQuery(); 
     cmd.Parameters.Clear(); 
    } 
    connection.Close(); 
} 
} 
catch (Exception ex) 
{ 

throw new Exception(ex.Message); 
} 
} 

,這裏是我的形象,下載方法

private void DownloadLogo() 
{ 

string localFilename = Application.StartupPath + @"\Imgs\"; 
if (!Directory.Exists(localFilename)) 
Directory.CreateDirectory(localFilename); 

foreach (var mediaChannel in channelList) 
{ 

string imgName = mediaChannel.ImagePath; 
if (imgName.Contains("http://")) 
{ 
int tmp1 = mediaChannel.ImagePath.LastIndexOf('/'); 
imgName = mediaChannel.ImagePath.Substring(tmp1 + 1, mediaChannel.ImagePath.Length - tmp1 - 1); 

} 


if (!File.Exists(localFilename + imgName)) 
{ 


using (var client = new WebClient()) 
{ 

client.DownloadFile(mediaChannel.ImagePath, localFilename + imgName); 
} 
} 
} 
} 

一切看起來不錯,我從來沒有得到過這樣的問題。如果我作爲管理員運行我的程序,它的工作原理...

還有一件事,我打開我的數據庫是在C:\ Program Files文件(x86)\ XXXXXXX \數據 我用MS Access和有趣的,我可以不編輯表格。它說我需要保存爲你的文件進行更改..我認爲程序文件(86)受UAC保護。我的操作系統是Windows 8 Professional。

也許安裝程序使它像這樣?因爲我無法使用Visual Studio安裝程序,因爲安裝屏蔽設置的許可證有限,所以我使用了第三方安裝程序製作程序。

那麼,如何解決這個問題?我的客戶正在等待我解決此問題。

回答

4

您可能需要使用AppData文件夾而不是Program Files文件夾。 檢查這個相似的問題Saving a file to Application Data in c#

+0

謝謝Radenko的回答,這就是我所期待的。正如Matthew所說,爲了在所有用戶中分享數據庫,ProgramData看起來更好,對嗎?有沒有像UAC那樣需要? – ertan2002

+0

AppData文件夾特定於每個用戶,因此只有在每個用戶需要單獨的數據庫文件時才使用該文件夾。如果您想在所有用戶之間共享數據庫文件,則需要使用ProgramData。 –

+1

@ ertan2002你不應該需要UAC來訪問ProgramData下的文件夾。 –

3

您正在嘗試修改Program Files中的文件。這是文件系統的一個區域,它不是爲可變應用程序數據設計的 - 它基本上是隻讀的。對這個區域的修改是可疑的,因此UAC提示。

您應該通過將數據存儲在文件系統中更合適的位置來解決此問題。究竟在哪裏取決於你的應用程序試圖做什麼。 (這是服務還是本地客戶端應用程序?數據是專門針對登錄用戶還是計算機範圍的?)

+0

謝謝你的解釋,我comletly理解和Radenko ZEC的soluation是我需要做的 – ertan2002

相關問題