我创建了一个具有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安装程序,因为安装屏蔽设置的许可证有限,所以我使用了第三方安装程序制作程序。
那么,如何解决这个问题?我的客户正在等待我解决此问题。
谢谢Radenko的回答,这就是我所期待的。正如Matthew所说,为了在所有用户中分享数据库,ProgramData看起来更好,对吗?有没有像UAC那样需要? – ertan2002
AppData文件夹特定于每个用户,因此只有在每个用户需要单独的数据库文件时才使用该文件夹。如果您想在所有用户之间共享数据库文件,则需要使用ProgramData。 –
@ ertan2002你不应该需要UAC来访问ProgramData下的文件夹。 –