Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Самообновление программы в Program Files / 19 сообщений из 19, страница 1 из 1
16.10.2017, 11:03:57
    #39536752
Devillio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
Доброго времени суток!

Подскажите, как обновлять свою программу, если она установлена в Program Files.
Если в другой папке - все работает, т.е. вопрос в записи в свою папку в Program Files.
Другие же как-то обновляются программы.
Программа сетевая, она заменяет exe с сайта, а другим клиентам той же бд меняет exe уже из базы при следующем запуске.
Повторюсь, в других папках работает и удобно, решаемо ли как-то для Program Files?

Можно ли задать вопрос о повышении прав в момент обновления? Умею только через манифест при запуске всей программы.
Или может правильно вынести все операции обновления в другую программу и ее уже с манифестом запускать из первой?

В общем, если не затруднит, направьте на путь как правильно решить?

Спасибо!
...
Рейтинг: 0 / 0
16.10.2017, 11:20:46
    #39536764
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
Права доступа можно увеличить прямо для текущего приложения. Вот тут есть решение: 20765641
...
Рейтинг: 0 / 0
16.10.2017, 11:43:33
    #39536789
Devillio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
JaDi, благодарю! Интересно, сохранил в закладки.
Но спрашивать логин/пароль/домен у пользователей не хочу (не для себя делается).
Думаю надо просто в другую программу вынести да и не мудрить. И ей уже манифест прикрутить.
...
Рейтинг: 0 / 0
16.10.2017, 11:57:22
    #39536794
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
Если надо запускать копию своего приложения с повышенными правами, то можно воспользоваться вот этим решением: 18548818 (там есть код для делфи).

Т.е. при необходимости обновления -- качаем новую версию, сохраняем во временную папку, оттуда запускаем с правами, текущую версию закрываем и то приложение делает нужные обновления (заменяет файлы и т.п.).
...
Рейтинг: 0 / 0
16.10.2017, 12:35:48
    #39536811
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
Ого.. Ну и любители же, пописать коды обширные - бесполезные...


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
uses  ShellApi;


function IsUserAnAdmin(): BOOL; external shell32;  // Windows Server 2003

procedure TForm1.FormCreate(Sender: TObject);
begin
  if not IsUserAnAdmin() then
    ShellExecute(0, 'runas', PWideChar(Application.ExeName), '', '', SW_SHOW);
end;
...
Рейтинг: 0 / 0
16.10.2017, 12:36:27
    #39536813
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
Няшик,

*

Код: pascal
1.
function IsUserAnAdmin(): BOOL; external shell32;  // Minimum Windows Server 2003
...
Рейтинг: 0 / 0
16.10.2017, 12:39:56
    #39536816
Aniskin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
Только нужно помнить, что MSDN пишет о IsUserAnAdmin:

IsUserAnAdmin is available for use in the operating systems specified in the Requirements section. It may be altered or unavailable in subsequent versions.

This function is a wrapper for CheckTokenMembership. It is recommended to call that function directly to determine Administrator group status rather than calling IsUserAnAdmin.
...
Рейтинг: 0 / 0
16.10.2017, 12:44:26
    #39536818
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
Вариант 1: Отдельная служба для обновления, устанавливаемая вместе с программой.
Вариант 2: Задание в планировщике, запускаемое от администратора без сохранения пароля (см. как это делает CCleaner для обхода UAC).
...
Рейтинг: 0 / 0
16.10.2017, 12:45:22
    #39536819
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
Aniskin,

На10 - ке работает отлично. С включённым UAC и выключенным. Значит и на других системах будет

И вряд ли её выведут из использования, раз она уже 16 лет на борту
...
Рейтинг: 0 / 0
16.10.2017, 12:45:37
    #39536820
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
Няшик,

И каждый раз обычный пользователь будет жать "да, хочу обновить", а потом бегать за сисадмином, чтобы он ввёл пароль от учётки с повышенными правами? Офигенное юзабилити :)
...
Рейтинг: 0 / 0
16.10.2017, 12:49:03
    #39536826
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
alekcvpсм. как это делает CCleaner для обхода UAC.

Плохой пример. Эта фигня не работает. Он перезапускает и перезапускает программу. И так не запускает. И завершить это дияние без перезагрузки пк невозможно.

...
Рейтинг: 0 / 0
16.10.2017, 13:47:31
    #39536857
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
Сервис имеет все права
...
Рейтинг: 0 / 0
16.10.2017, 13:52:41
    #39536863
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
Няшикalekcvpсм. как это делает CCleaner для обхода UAC.
Плохой пример. Эта фигня не работает. Он перезапускает и перезапускает программу. И так не запускает. И завершить это дияние без перезагрузки пк невозможно.

Возможно там надо запускать с параметрами.
Но смысл не в этом, а в том что можно создать задачу, которая будет запускать приложение с ключом типа /update и админскими правами раз в час, например, и проверять обновления на сайте. При этом права пользователя, вошедшего в систему, вообще никому не интересны. Главное предусмотреть механизм взаимодействия с запущенными экземплярами приложения (завершение и перезапуск).
...
Рейтинг: 0 / 0
16.10.2017, 14:21:23
    #39536883
Devillio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
Благодарю всех отозвавшихся.
Запускаю замену файла отдельной программой через ShellExecute 'runas'.
На тестовой машине Win10 - заработало.
...
Рейтинг: 0 / 0
16.10.2017, 16:43:41
    #39536991
Vizit0r
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
у моих юзеров множественные проблемы с доступом по куче каталогов с диска C. Там и Program Files, и подкаталоги из Users, и даже пользовательские каталоги, на которые вряд ли кто-то специально менял права доступа.

Повысить права (или runas) - не проблема, осталось только понять, когда это нужно делать. Пока что я при каждом сохранении или обращении к файлам, могущим быть в "плохих" каталогах - обхожусь костылями с проверкой errorcode при определенных ошибках, при коде 5 (access denied) считается что доступа нет. Чего-то более вменяемого не придумалось.

При этом переименовать файл получается нормально, а уже создать новый файл с тем же именем - уже нужны права.
...
Рейтинг: 0 / 0
16.10.2017, 16:51:39
    #39537008
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
Vizit0r,

при появлении такой ошибки -- предлагать пользователю повысить права, после чего перезапустить приложение под админом. Во многих программах такое видел.
...
Рейтинг: 0 / 0
16.10.2017, 17:10:45
    #39537025
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
DevillioБлагодарю всех отозвавшихся.
Запускаю замену файла отдельной программой через ShellExecute 'runas'.
На тестовой машине Win10 - заработало.
... вот так и появляются приложения, которые при загрузке системы вываливают Elevation Required диалог чтобы проверить обновления, и жутко бесят. Java одно время этим страдала.
...
Рейтинг: 0 / 0
16.10.2017, 18:19:40
    #39537051
Aniskin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
НяшикAniskin,

На10 - ке работает отлично. С включённым UAC и выключенным. Значит и на других системах будет

И вряд ли её выведут из использования, раз она уже 16 лет на борту

Вряд ли ее выведут, но вот ее поведение может измениться. Пример. Была функция GetVersionEx, возвращающая версию Windows. Она тоже никуда не исчезла, но вот ее поведение изменилось, сейчас она возвращает не актуальную версию, а версию с учетом манифеста приложения. Вот и в теории IsUserAnAdmin может измениться. Если уж MS рекомендует использовать CheckTokenMembership напрямую, то нет никакой технической сложности не делать это и не иметь потенциального гемора в будущем.
...
Рейтинг: 0 / 0
17.10.2017, 19:47:10
    #39537707
pgiw99oeo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самообновление программы в Program Files
DevillioДоброго времени суток!

Подскажите, как обновлять свою программу, если она установлена в Program Files.
Если в другой папке - все работает, т.е. вопрос в записи в свою папку в Program Files.
Другие же как-то обновляются программы.
Программа сетевая, она заменяет exe с сайта, а другим клиентам той же бд меняет exe уже из базы при следующем запуске.
Повторюсь, в других папках работает и удобно, решаемо ли как-то для Program Files?

Можно ли задать вопрос о повышении прав в момент обновления? Умею только через манифест при запуске всей программы.
Или может правильно вынести все операции обновления в другую программу и ее уже с манифестом запускать из первой?

В общем, если не затруднит, направьте на путь как правильно решить?

Спасибо!а зачем в ПрограмФайлс устанавливать?
установи туда стартер, а основную прогу в темп куда-нить или в аппликатиондата
при запуске стартер будет провеярть есть обновление или нет
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Самообновление программы в Program Files / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]