2014-01-14 69 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

相关问题