2014-01-14 2 views
0

Я создал приложение, имеющее 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.

Возможно, программа установки делает это так? Потому что я не могу использовать визуальную настройку студии из-за ограниченной лицензии установки установки экрана, тогда я использовал приложение для создания третьей части.

Итак, как решить эту проблему? Мой клиент ждет меня, чтобы исправить эту проблему.

ответ

4

Возможно, вам придется использовать папку AppData вместо папки Program Files. Посмотрите этот же вопрос Saving a file to Application Data in c#

+0

Спасибо Раденко за ваш ответ, что это то, что я ищу. Как сказал Мэтью, чтобы разделить db среди всех пользователей, ProgramData выглядит лучше, не так ли? Есть ли какие-либо требования, такие как UAC? – ertan2002

+0

Папка AppData предназначена для каждого пользователя, поэтому используйте ее только в том случае, если вы хотите, чтобы для каждого пользователя был отдельный файл базы данных. Если вы хотите разделить файл базы данных между всеми пользователями, вам нужно вместо этого использовать ProgramData. –

+1

@ ertan2002 Вам не нужно UAC для доступа к папкам под ProgramData. –

3

Вы пытаетесь изменить файл в пределах Program Files. Это область файловой системы, которая не предназначена для изменяемых данных приложения - она ​​в основном предназначена для чтения только для чтения. Модификации в этой области являются подозрительными, поэтому приглашение UAC.

Вы должны исправить это, сохранив ваши данные в более подходящем месте в файловой системе. Именно там, где это будет, будет зависеть от того, что пытается сделать ваше приложение. (Является ли это услугой или просто локальным клиентским приложением? Являются ли данные конкретными для входа в систему или для всего компьютера?)

+0

спасибо за объяснение, я comletly понять и soluation Раденко Зек является то, что мне нужно сделать – ertan2002

Смежные вопросы