Russian Qt Forum
Ноябрь 26, 2024, 13:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Обновление DLL в win7  (Прочитано 8552 раз)
Etud
Гость
« : Август 02, 2011, 13:59 »

Известно, что программа не может изменять DLL  (другие данные) в Program Files, так как это системная защищённая папка.

Но программа по дефолту с моими библиотеками устанавливается именно туда.

У меня в программе (установлена C:\Program Files\MyProgram\тут папки) нужно периодически обновлять DLL-ки.

Пока вижу простое решение:
Задать папку с обновляемыми DLL прямо прямо на диске C:\Plugins, в которой и обновляю свои библиотеки.

Недостаток:
Пользователь может удалить эту папку, ведь она на видном месте.

Есть ли другие хорошие решения ?!!
Записан
Fess
Гость
« Ответ #1 : Август 02, 2011, 14:04 »

1. Качаете обновление в темп (инсталлятор)
2. Кидаете юзеру алерт о том, что есть обновление и оно готово к установке
3. Юзер ставит с нужными правами.
Записан
Etud
Гость
« Ответ #2 : Август 02, 2011, 14:21 »

Спасибо, и как вариант приемлемо.

Но это ручное обновление, а нужно автоматическое.

Не хочется юзера напрягать установкой, просто нажал кнопку-скачал update.
Записан
Blackwanderer
Гость
« Ответ #3 : Август 02, 2011, 14:24 »

Копайте в WinAPI. Возможность программно выполнить что-то с админскими правами (если таковые есть) точно существует. В Total Commander есть соответствующие кнопочки для удаления/записи в защищенные каталоги.
Записан
Etud
Гость
« Ответ #4 : Август 02, 2011, 14:27 »

DLL-ки маленькие (8 КБ) и делать инсталлятор не выгодно.

А искать папку C:\Program Files\MyProgram\Plugins, переносить вручную пользователю сложно.
Записан
Etud
Гость
« Ответ #5 : Август 02, 2011, 14:29 »

Копайте в WinAPI. Возможность программно выполнить что-то с админскими правами (если таковые есть) точно существует. В Total Commander есть соответствующие кнопочки для удаления/записи в защищенные каталоги.

О, вот видимо верно.

Осталось выяснить как выставить админские права на папку в Win7.
Записан
Blackwanderer
Гость
« Ответ #6 : Август 02, 2011, 14:44 »

Цитировать
Осталось выяснить как выставить админские права на папку в Win7.
Права выдаются именно на действие: копирование, изменение настроек системы и т.д.
Записан
Странник
Гость
« Ответ #7 : Август 02, 2011, 14:45 »

по-моему, если пользователь не имеет права записи в папку с программой, лучше вывести сообщение об этом и не извращаться.
Записан
zenden
Гость
« Ответ #8 : Август 02, 2011, 15:18 »

Вот код запуска программы с повышенными правами:
Код
C++ (Qt)
void RunElevated()
{
       SHELLEXECUTEINFO TempInfo = {0};
       TCHAR buf[MAX_PATH];
       GetModuleFileName(0, buf, MAX_PATH - 1);
       CString s = GetAppFolder();
       TempInfo.cbSize = sizeof(SHELLEXECUTEINFOA);
       TempInfo.fMask = 0;
       TempInfo.hwnd = NULL;
       TempInfo.lpVerb = _T("runas");
       TempInfo.lpFile = buf;
       TempInfo.lpParameters = _T(" /option");
       TempInfo.lpDirectory = s;
       TempInfo.nShow = SW_NORMAL;
 
       ::ShellExecuteEx(&TempInfo);
}

Осталось только обработать параметр командной строки '/option' и выполнять нужные операции с файлами.
Записан
Etud
Гость
« Ответ #9 : Август 02, 2011, 16:01 »

Оказалось на папку C:\Program Files\MyProgram\Plugins
нужно для Пользователя выставить разрешения на изменение-запись файлов (по умолчанию только чтение).

То есть нужно программно изменить разрешения для моей папки Plugins.

Как это сделать ? Вот что нужно !

Вот код запуска программы с повышенными правами...

А что делает этот код, можно подробнее.

Может это сильно круто - давать повышенные права программе ?!!
Записан
zenden
Гость
« Ответ #10 : Август 02, 2011, 16:10 »

Может это сильно круто - давать повышенные права программе ?!!

нет, не сильно круто,


многие программы так делают
Записан
Etud
Гость
« Ответ #11 : Август 02, 2011, 16:29 »

Т.е. у программы сразу права админа и соответсвенно для папки DLL они работают ?

Так я понял ?


Осталось только обработать параметр командной строки '/option' и выполнять нужные операции с файлами.

тут поподробнее плиз, что обработать...
Записан
zenden
Гость
« Ответ #12 : Август 02, 2011, 17:25 »



тут поподробнее плиз, что обработать...

Предыдущий код запускает еще одну копию вашей программы с параметром командной строки.
А вот простейший код, анализирующий переданные параметры:

Код
C++ (Qt)
if(QCoreApplication::arguments ().at(1) == "/option")
{
 // ... здесь обновляете DLL и выходите
 // программа обладает админскими правами
}
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #13 : Август 02, 2011, 18:12 »

А почему не назначать права на плагинс при установке программы?Улыбающийся
Записан
Etud
Гость
« Ответ #14 : Август 02, 2011, 19:43 »

А почему не назначать права на плагинс при установке программы?Улыбающийся

да, у меня такая мысль была выше.

как это программно сделать ?
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.189 секунд. Запросов: 23.