Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Опять обновление программы  [new]
MasterZ
Member

Откуда: Москва
Сообщений: 1144
Здравствуйте!
Требуется сделать обновление небольшой программки через интернет ПО ЗАПРОСУ ПОЛЬЗОВАТЕЛЯ.
В папке проекта все работает(программа + апдейтер). После установки в program files начались проблемы c доступом.
Перечитал много тем по обновлениям, но до истины так и не докопался.
Я понял, что нужно создать сервис, который будет запускаться при установке под админской учеткой. Он и будет подменять файлы программы и библиотек в program files
Подскажите как запустить сервис из программы?
Как потом из сервиса запустить обновленную программу?
Или может я вообще двигаюсь в неправильном направлении?
4 апр 19, 11:19    [21852291]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
alekcvp
Member

Откуда:
Сообщений: 1645
MasterZ
Подскажите как запустить сервис из программы?
Через IPC, например. Shared Memory или Named Pipes или вообще сокеты. Программа подключается к сервису и запрашивает обновление, после чего сервис должен как-то штатно завершить все запущенные экземпляры программы, а на компьютере их может быть запущено несколько, под разными пользователями, а если это удалённый рабочий стол, то кто-то может в ней работать и не будет рад прерыванию своей работы.

MasterZ
Как потом из сервиса запустить обновленную программу?
Тут сложнее, надо в первом пункте составить список пользователей, у кого она была запущена и потом заново запустить её от имени этих пользователей (как реализовать - хз, не делал так).

MasterZ
Или может я вообще двигаюсь в неправильном направлении?
Если вам необходимо чтобы обновляли программу именно пользователи - может её устанавливать не в Program Files, а в %appdata%?.. Для каждого пользователя - свой экземпляр, с которым он может делать всё что угодно и, заодно, дополнительная служба не потребуется?
4 апр 19, 11:41    [21852344]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 26166
MasterZ
Или может я вообще двигаюсь в неправильном направлении?

Нынче модно в appdata ставиться и там же обновляться.
4 апр 19, 11:54    [21852382]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
ziv-2014
Member

Откуда:
Сообщений: 468
wadman
MasterZ
Или может я вообще двигаюсь в неправильном направлении?

Нынче модно в appdata ставиться и там же обновляться.

Бесит это! Приложение, которое ставится в appdata - должно сразу же удаляться с компьютера.
4 апр 19, 12:32    [21852471]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
alekcvp
Member

Откуда:
Сообщений: 1645
ziv-2014
wadman
пропущено...

Нынче модно в appdata ставиться и там же обновляться.

Бесит это! Приложение, которое ставится в appdata - должно сразу же удаляться с компьютера.


Правильно! Больше всякого *овна на компьютер с админскими правами! :)
4 апр 19, 13:48    [21852608]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
Foxpc
Member

Откуда:
Сообщений: 162
ненавижу захламляющие сервисы как в гугл хроме. Лучше брать пример с мозиллы, и проверять обновления при запуске
4 апр 19, 13:59    [21852622]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
MasterZ
Member

Откуда: Москва
Сообщений: 1144
ziv-2014
wadman
пропущено...

Нынче модно в appdata ставиться и там же обновляться.

Бесит это! Приложение, которое ставится в appdata - должно сразу же удаляться с компьютера.


Микрософты потом запретят запускать программу из appdata, придется переделывать.

Хочется как в мозиле, или notepad++ с одним условием, чтобы приложение или сервис само не лезло в интернет ПО ЗАПРОСУ ПОЛЬЗОВАТЕЛЯ..
4 апр 19, 14:09    [21852637]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6243
MasterZ
Хочется как в мозиле, или notepad++ с одним условием, чтобы приложение или сервис само не лезло в интернет ПО ЗАПРОСУ ПОЛЬЗОВАТЕЛЯ..


Приделать менюшку/кнопку "Проверить обновления" - не предлагать?
4 апр 19, 14:22    [21852663]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
MasterZ
Member

Откуда: Москва
Сообщений: 1144
[quot alekcvp]
MasterZ
Подскажите как запустить сервис из программы?
Через IPC, например. Shared Memory или Named Pipes или вообще сокеты. Программа подключается к сервису и запрашивает обновление, после чего сервис должен как-то штатно завершить все запущенные экземпляры программы, а на компьютере их может быть запущено несколько, под разными пользователями, а если это удалённый рабочий стол, то кто-то может в ней работать и не будет рад прерыванию своей работы.

Я думаю немного по другому. Сервис нужен только для того, чтобы с правами админа подменить старые файлики программы новыми. Пользователь запрашивает обновления, через меню и приложение проверяет есть-нет, закачивает все что нужно, сообщает сервису что ему пора работать и убивается. Сервис, как я уже говорил, подменяет старые файлы новыми и запускает обновленное приложение.
4 апр 19, 14:43    [21852692]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
alekcvp
Member

Откуда:
Сообщений: 1645
MasterZ
сообщает сервису что ему пора работать и убивается. Сервис, как я уже говорил, подменяет старые файлы новыми и запускает обновленное приложение.

... а в этот момент приложение запущено у ещё 2х пользователей по RDP и сервис идёт лесом, т.к. exeшник заблокирован ?..
4 апр 19, 14:51    [21852708]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
MasterZ
Member

Откуда: Москва
Сообщений: 1144
alekcvp
MasterZ
сообщает сервису что ему пора работать и убивается. Сервис, как я уже говорил, подменяет старые файлы новыми и запускает обновленное приложение.

... а в этот момент приложение запущено у ещё 2х пользователей по RDP и сервис идёт лесом, т.к. exeшник заблокирован ?..


Да, об этом я не подумал, проблемма...
Программа задумывалась как персональная не многопользовательская, но получается, что по закону Мерфи...
4 апр 19, 14:59    [21852729]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
alekcvp
Member

Откуда:
Сообщений: 1645
MasterZ
Программа задумывалась как персональная не многопользовательская

В чём тогда проблема засунуть её в профиль пользователя (appdata) ?..
4 апр 19, 15:06    [21852743]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
rgreat
Member

Откуда:
Сообщений: 5455
wadman
Нынче модно в appdata ставиться и там же обновляться.
Каких только сексуальных девиаций в мире не встретишь...
4 апр 19, 15:08    [21852750]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
Василий 2
Member

Откуда:
Сообщений: 811
alekcvp
Через IPC, например. Shared Memory или Named Pipes или вообще сокеты. Программа подключается к сервису и запрашивает обновление, после чего сервис должен как-то штатно завершить все запущенные экземпляры программы, а на компьютере их может быть запущено несколько, под разными пользователями, а если это удалённый рабочий стол, то кто-то может в ней работать и не будет рад прерыванию своей работы.

Что-то чересчур мудрено. Всё, что описано как задача сервиса, может выполнять инсталлятор. Который будет запущен от админа.
4 апр 19, 17:26    [21853043]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1010
MasterZ
Здравствуйте!
Требуется сделать обновление небольшой программки через интернет ПО ЗАПРОСУ ПОЛЬЗОВАТЕЛЯ.
В папке проекта все работает(программа + апдейтер). После установки в program files начались проблемы c доступом.
...

Апдейтер должен работать с правами администратора, нужно добавить соответствующий манифест.
4 апр 19, 18:07    [21853090]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
Foxpc
Member

Откуда:
Сообщений: 162
Запускается отдельная программа апдейт, возвращает через команду что есть обновления. Текущая программа запускает через runas программу апдейт с правами, и закрывает саму себя. И начинает обновления программы - апдейт
4 апр 19, 18:19    [21853097]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
alekcvp
Member

Откуда:
Сообщений: 1645
Василий 2
Всё, что описано как задача сервиса, может выполнять инсталлятор. Который будет запущен от админа.

Вы ТЗ читали? Обновлять приложение должен пользователь, как он запустит инсталлятор "от админа"?
4 апр 19, 19:02    [21853146]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
alekcvp
Member

Откуда:
Сообщений: 1645
Foxpc
Текущая программа запускает через runas программу апдейт с правами, и закрывает саму себя. И начинает обновления программы - апдейт
1. Откуда программа знает данные учётной записи администратора?
2. Что делать, если есть экземпляры программы, запущенные другими пользователями?
4 апр 19, 19:03    [21853147]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
Foxpc
Member

Откуда:
Сообщений: 162
alekcvp,

1)
ShellExecute(0, PWideChar('runas'), PWideChar(Application.ExeName), nil, nil, 5);

+
program Project3;

{$APPTYPE CONSOLE}
{$R *.res}
uses
  System.SysUtils, ShellAPI, Vcl.Forms;

begin
  try
    Writeln('Run Admin?');
    Readln;
    ShellExecute(0, PWideChar('runas'), PWideChar(Application.ExeName), nil, nil, 5);
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

end.


2) Как понять - другим пользователем? Запускается от того, от кого была запущена программа
4 апр 19, 20:49    [21853236]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4046
alekcvp
Программа подключается к сервису и запрашивает обновление, после чего сервис должен как-то штатно завершить все запущенные экземпляры программы, а на компьютере их может быть запущено несколько, под разными пользователями, а если это удалённый рабочий стол, то кто-то может в ней работать и не будет рад прерыванию своей работы.

MasterZ
Как потом из сервиса запустить обновленную программу?
Тут сложнее, надо в первом пункте составить список пользователей, у кого она была запущена и потом заново запустить её от имени этих пользователей (как реализовать - хз, не делал так).
Все это не надо. Сервис стягивает (можно по запросу) обновление, переименовывает старый экзешник (да, это штатно разрешено, даже он "заблокирован") и переписывает на его место новый. Всё. Ну, можно, если надо, еще сообщить тем, кто запрашивал обновление, что оно готово.
5 апр 19, 00:59    [21853390]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4046
YuRock
даже он
даже если он
5 апр 19, 01:00    [21853391]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4046
Foxpc
ненавижу захламляющие сервисы как в гугл хроме.
Меня тоже от этого воротит. Но сейчас это мэйнстрим - при установке, которая проходит с админскими правами, ты можешь установить программу в PF, которую сможет запускать любой, и службу, которая local admin. Определенная логика и польза в таком подходе есть. В будущем всегда можно что-либо дополнительное прикрутить к службе, когда нужны права.
5 апр 19, 01:04    [21853394]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4046
Foxpc
Лучше брать пример с мозиллы, и проверять обновления при запуске
Ну так бери пример, только полностью. Она не проверяет при запуске, она постоянно апдейты тянет, а пни запуске просто проверяет, стянут ли очередной апдейт. Можно и по запросу это проверять и перезапускаться, если он стянут.
5 апр 19, 01:09    [21853395]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
I partigiani resistono
Member

Откуда:
Сообщений: 3
MasterZ
...нужно создать сервис, который будет запускаться при установке под админской учеткой. Он и будет подменять файлы программы и библиотек в program files...


"Все уже украдено до нас" - (с).

https://ru.wikipedia.org/wiki/Установщик_Windows

Сценарий инсталляции (документ .msi) выполняется под специальной учеткой, в привилегированном режиме службы NT (конкретно — под аккаунтом LocalSystem), эта учетка может доволно много, даже если у юзера совсем немного прав.

В сценарий воткнуть можно все, что угодно, даже запуск своего прежнего инсталлятора.
5 апр 19, 02:14    [21853409]     Ответить | Цитировать Сообщить модератору
 Re: Опять обновление программы  [new]
MasterZ
Member

Откуда: Москва
Сообщений: 1144
s62
MasterZ
Здравствуйте!
Требуется сделать обновление небольшой программки через интернет ПО ЗАПРОСУ ПОЛЬЗОВАТЕЛЯ.
В папке проекта все работает(программа + апдейтер). После установки в program files начались проблемы c доступом.
...

Апдейтер должен работать с правами администратора, нужно добавить соответствующий манифест.


Как вариант подходит, но возможно ли это для CreateProcess, как?.
ShellExecuteEx использвать не хочется.
И еще, будет ли запрос на запуск апдейтера под админом. Такой запрос будет пугать пользователей. Не хотелось бы.
5 апр 19, 08:03    [21853488]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Delphi Ответить