powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Самообновление программы в Program Files
19 сообщений из 19, страница 1 из 1
Самообновление программы в Program Files
    #39536752
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

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

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

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

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

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


Код: 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
Самообновление программы в Program Files
    #39536813
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няшик,

*

Код: pascal
1.
function IsUserAnAdmin(): BOOL; external shell32;  // Minimum Windows Server 2003
...
Рейтинг: 0 / 0
Самообновление программы в Program Files
    #39536816
Aniskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только нужно помнить, что 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
Самообновление программы в Program Files
    #39536818
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант 1: Отдельная служба для обновления, устанавливаемая вместе с программой.
Вариант 2: Задание в планировщике, запускаемое от администратора без сохранения пароля (см. как это делает CCleaner для обхода UAC).
...
Рейтинг: 0 / 0
Самообновление программы в Program Files
    #39536819
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aniskin,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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