Я создал приложение, имеющее ini-файл и db.mdb (доступ), и загружает некоторые изображения из Интернета в папку, расположенную рядом с App.Почему для изменения файлов требуется UAC?
Ну, я создал файл установки с помощью программы установки Factory Software. Все кажется довольно хорошим, и я начал свое приложение, и он не меняет значение ini-файла, не загружает изображения и не вставляет никаких рекурр в db.
здесь путь моего приложения, 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);
}
}
}
}
Все выглядит нормально, и я никогда не получал такого рода проблемы. Если я запускаю свою программу как администратор, она работает ...
Еще одна вещь, я открыл свой db, который находится в C: \ Program Files (x86) \ XXXXXXX \ data Я использовал MS Access и интересен, могу не редактировать таблицу. В нем говорится, что вам нужно сохранить файл для изменения. Я думаю, что программные файлы (86) защищены UAC. Моя ОС - Windows 8 Professional.
Возможно, программа установки делает это так? Потому что я не могу использовать визуальную настройку студии из-за ограниченной лицензии установки установки экрана, тогда я использовал приложение для создания третьей части.
Итак, как решить эту проблему? Мой клиент ждет меня, чтобы исправить эту проблему.
Спасибо Раденко за ваш ответ, что это то, что я ищу. Как сказал Мэтью, чтобы разделить db среди всех пользователей, ProgramData выглядит лучше, не так ли? Есть ли какие-либо требования, такие как UAC? – ertan2002
Папка AppData предназначена для каждого пользователя, поэтому используйте ее только в том случае, если вы хотите, чтобы для каждого пользователя был отдельный файл базы данных. Если вы хотите разделить файл базы данных между всеми пользователями, вам нужно вместо этого использовать ProgramData. –
@ ertan2002 Вам не нужно UAC для доступа к папкам под ProgramData. –