powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Опять обновление программы
62 сообщений из 62, показаны все 3 страниц
Опять обновление программы
    #39796281
MasterZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Требуется сделать обновление небольшой программки через интернет ПО ЗАПРОСУ ПОЛЬЗОВАТЕЛЯ.
В папке проекта все работает(программа + апдейтер). После установки в program files начались проблемы c доступом.
Перечитал много тем по обновлениям, но до истины так и не докопался.
Я понял, что нужно создать сервис, который будет запускаться при установке под админской учеткой. Он и будет подменять файлы программы и библиотек в program files
Подскажите как запустить сервис из программы?
Как потом из сервиса запустить обновленную программу?
Или может я вообще двигаюсь в неправильном направлении?
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796304
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZПодскажите как запустить сервис из программы?Через IPC, например. Shared Memory или Named Pipes или вообще сокеты. Программа подключается к сервису и запрашивает обновление, после чего сервис должен как-то штатно завершить все запущенные экземпляры программы, а на компьютере их может быть запущено несколько, под разными пользователями, а если это удалённый рабочий стол, то кто-то может в ней работать и не будет рад прерыванию своей работы.

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

MasterZИли может я вообще двигаюсь в неправильном направлении?Если вам необходимо чтобы обновляли программу именно пользователи - может её устанавливать не в Program Files, а в %appdata%?.. Для каждого пользователя - свой экземпляр, с которым он может делать всё что угодно и, заодно, дополнительная служба не потребуется?
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796322
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZИли может я вообще двигаюсь в неправильном направлении?
Нынче модно в appdata ставиться и там же обновляться.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796368
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanMasterZИли может я вообще двигаюсь в неправильном направлении?
Нынче модно в appdata ставиться и там же обновляться.
Бесит это! Приложение, которое ставится в appdata - должно сразу же удаляться с компьютера.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796451
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ziv-2014wadmanпропущено...

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

Правильно! Больше всякого *овна на компьютер с админскими правами! :)
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796457
Foxpc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ненавижу захламляющие сервисы как в гугл хроме. Лучше брать пример с мозиллы, и проверять обновления при запуске
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796470
MasterZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ziv-2014wadmanпропущено...

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

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

Хочется как в мозиле, или notepad++ с одним условием, чтобы приложение или сервис само не лезло в интернет ПО ЗАПРОСУ ПОЛЬЗОВАТЕЛЯ..
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796489
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZХочется как в мозиле, или notepad++ с одним условием, чтобы приложение или сервис само не лезло в интернет ПО ЗАПРОСУ ПОЛЬЗОВАТЕЛЯ..

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

Я думаю немного по другому. Сервис нужен только для того, чтобы с правами админа подменить старые файлики программы новыми. Пользователь запрашивает обновления, через меню и приложение проверяет есть-нет, закачивает все что нужно, сообщает сервису что ему пора работать и убивается. Сервис, как я уже говорил, подменяет старые файлы новыми и запускает обновленное приложение.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796517
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZсообщает сервису что ему пора работать и убивается. Сервис, как я уже говорил, подменяет старые файлы новыми и запускает обновленное приложение.
... а в этот момент приложение запущено у ещё 2х пользователей по RDP и сервис идёт лесом, т.к. exeшник заблокирован ?..
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796526
MasterZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpMasterZсообщает сервису что ему пора работать и убивается. Сервис, как я уже говорил, подменяет старые файлы новыми и запускает обновленное приложение.
... а в этот момент приложение запущено у ещё 2х пользователей по RDP и сервис идёт лесом, т.к. exeшник заблокирован ?..

Да, об этом я не подумал, проблемма...
Программа задумывалась как персональная не многопользовательская, но получается, что по закону Мерфи...
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796533
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZПрограмма задумывалась как персональная не многопользовательская
В чём тогда проблема засунуть её в профиль пользователя (appdata) ?..
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796535
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanНынче модно в appdata ставиться и там же обновляться.Каких только сексуальных девиаций в мире не встретишь...
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796713
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpЧерез IPC, например. Shared Memory или Named Pipes или вообще сокеты. Программа подключается к сервису и запрашивает обновление, после чего сервис должен как-то штатно завершить все запущенные экземпляры программы, а на компьютере их может быть запущено несколько, под разными пользователями, а если это удалённый рабочий стол, то кто-то может в ней работать и не будет рад прерыванию своей работы.
Что-то чересчур мудрено. Всё, что описано как задача сервиса, может выполнять инсталлятор. Который будет запущен от админа.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796740
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZЗдравствуйте!
Требуется сделать обновление небольшой программки через интернет ПО ЗАПРОСУ ПОЛЬЗОВАТЕЛЯ.
В папке проекта все работает(программа + апдейтер). После установки в program files начались проблемы c доступом.
...
Апдейтер должен работать с правами администратора, нужно добавить соответствующий манифест.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796745
Foxpc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запускается отдельная программа апдейт, возвращает через команду что есть обновления. Текущая программа запускает через runas программу апдейт с правами, и закрывает саму себя. И начинает обновления программы - апдейт
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796778
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Всё, что описано как задача сервиса, может выполнять инсталлятор. Который будет запущен от админа.
Вы ТЗ читали? Обновлять приложение должен пользователь, как он запустит инсталлятор "от админа"?
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796779
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxpcТекущая программа запускает через runas программу апдейт с правами, и закрывает саму себя. И начинает обновления программы - апдейт1. Откуда программа знает данные учётной записи администратора?
2. Что делать, если есть экземпляры программы, запущенные другими пользователями?
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796797
Foxpc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp,

1)
Код: pascal
1.
ShellExecute(0, PWideChar('runas'), PWideChar(Application.ExeName), nil, nil, 5);


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
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) Как понять - другим пользователем? Запускается от того, от кого была запущена программа
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796873
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpПрограмма подключается к сервису и запрашивает обновление, после чего сервис должен как-то штатно завершить все запущенные экземпляры программы, а на компьютере их может быть запущено несколько, под разными пользователями, а если это удалённый рабочий стол, то кто-то может в ней работать и не будет рад прерыванию своей работы.

MasterZКак потом из сервиса запустить обновленную программу?Тут сложнее, надо в первом пункте составить список пользователей, у кого она была запущена и потом заново запустить её от имени этих пользователей (как реализовать - хз, не делал так).Все это не надо. Сервис стягивает (можно по запросу) обновление, переименовывает старый экзешник (да, это штатно разрешено, даже он "заблокирован") и переписывает на его место новый. Всё. Ну, можно, если надо, еще сообщить тем, кто запрашивал обновление, что оно готово.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796874
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockдаже ондаже если он
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796877
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxpcненавижу захламляющие сервисы как в гугл хроме.Меня тоже от этого воротит. Но сейчас это мэйнстрим - при установке, которая проходит с админскими правами, ты можешь установить программу в PF, которую сможет запускать любой, и службу, которая local admin. Определенная логика и польза в таком подходе есть. В будущем всегда можно что-либо дополнительное прикрутить к службе, когда нужны права.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796878
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxpcЛучше брать пример с мозиллы, и проверять обновления при запускеНу так бери пример, только полностью. Она не проверяет при запуске, она постоянно апдейты тянет, а пни запуске просто проверяет, стянут ли очередной апдейт. Можно и по запросу это проверять и перезапускаться, если он стянут.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796887
I partigiani resistono
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZ...нужно создать сервис, который будет запускаться при установке под админской учеткой. Он и будет подменять файлы программы и библиотек в program files...

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

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

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

В сценарий воткнуть можно все, что угодно, даже запуск своего прежнего инсталлятора.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796928
MasterZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62MasterZЗдравствуйте!
Требуется сделать обновление небольшой программки через интернет ПО ЗАПРОСУ ПОЛЬЗОВАТЕЛЯ.
В папке проекта все работает(программа + апдейтер). После установки в program files начались проблемы c доступом.
...
Апдейтер должен работать с правами администратора, нужно добавить соответствующий манифест.

Как вариант подходит, но возможно ли это для CreateProcess, как?.
ShellExecuteEx использвать не хочется.
И еще, будет ли запрос на запуск апдейтера под админом. Такой запрос будет пугать пользователей. Не хотелось бы.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796930
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZТакой запрос будет пугать пользователей. Не хотелось бы.А, ты хотел без запроса, молча админские права получить? Надо было сразу с этого начинать...
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796932
MasterZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I partigiani resistonoMasterZ...нужно создать сервис, который будет запускаться при установке под админской учеткой. Он и будет подменять файлы программы и библиотек в program files...

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

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

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

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

Обновление через инсталятор я не рассматриваю потому, что пользователю нужно будет сделать много движений при обновлении, а программка расчитана на НЕпродвинутых пользователй. И еще очень сильно усложняется инсталятор. Он должен выполнить скрипт по обновлению БД, а так же в его логике должен быть заложен откат до предыдущей версии в случае ошибки.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796942
MasterZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockMasterZТакой запрос будет пугать пользователей. Не хотелось бы.А, ты хотел без запроса, молча админские права получить? Надо было сразу с этого начинать...

Моя цель не получить админские права, а подменить старые файлы новыми. Ведь в других программах это как то делают и без всяких запросов на запуск под админом.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796948
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZбез всяких запросов на запуск под админомЕсли это PF и включен UAC - то именно под админом, только. Без запросов - значит одно из двух:
1. Эти программы используют службу;
2. Они знают пользователь/пароль админской учетки (хотя и это не панацея).
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796992
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxpcalekcvp,
Код: pascal
1.
ShellExecute(0, PWideChar('runas'), PWideChar(Application.ExeName), nil, nil, 5);

И что, таким образом любой пользователь с ограниченными правами может запустить любое приложение с правами администратора?.. Не зная пароля от учётной записи администратора? Серьёзно?

FoxpcКак понять - другим пользователем? Запускается от того, от кого была запущена программаWindows - многопользовательская система, кто-то мог работать с этой же программой и не выйти из учётки, после чего зашёл пользователь, который хочет "обновить" приложение. А может программа вообще работает на терминальном сервере, где её запускает куча разных пользователей одновременно.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39796997
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockСервис стягивает (можно по запросу) обновление, переименовывает старый экзешник (да, это штатно разрешено, даже он "заблокирован") и переписывает на его место новый. Всё.
https://stackoverflow.com/questions/7147577/programmatically-rename-open-file-on-windows Renaming requires that the file in question was opened with FileShare.Delete sharing. If that share flag is missing, you can not rename/move the file while it is still open.
Вы уверены, что Windows файл на исполнение открывает с этим флагом? Я вот почти уверен что нет.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797010
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZможет я вообще двигаюсь в неправильном направлении?а готовое решение заюзать не вариант, самому обязательно намутить?
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797011
MasterZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpFoxpcalekcvp,
Код: pascal
1.
ShellExecute(0, PWideChar('runas'), PWideChar(Application.ExeName), nil, nil, 5);

И что, таким образом любой пользователь с ограниченными правами может запустить любое приложение с правами администратора?.. Не зная пароля от учётной записи администратора? Серьёзно?

FoxpcКак понять - другим пользователем? Запускается от того, от кого была запущена программаWindows - многопользовательская система, кто-то мог работать с этой же программой и не выйти из учётки, после чего зашёл пользователь, который хочет "обновить" приложение. А может программа вообще работает на терминальном сервере, где её запускает куча разных пользователей одновременно.

Насчет этого я придумал как обойти. После того как пользователь нажмет "Обновить" прога посмотрит, есть ли другие пользователи подключенные в данный момент. Если есть, то обновление не выолняется или просит отключить пользователей. Но это потом буду разбираться. Сейчас хотелось бы узнать по подмене файлов, пока решение не найдено.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797048
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZСейчас хотелось бы узнать по подмене файлов, пока решение не найдено.
Подмена файлов в PF с правами пользователя - это отдельный сервис, который устанавливается вместе с программой и запускается от LocalSystem.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797052
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну или как вариант - задание в Task Scheduler'е с повышенными привилегиями и правом на запуск для обычных пользователей.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797079
Foxpc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvpИ что, таким образом любой пользователь с ограниченными правами может запустить любое приложение с правами администратора?.. Не зная пароля от учётной записи администратора? Серьёзно?

Любой. Только тебе придётся UAC подтвердить, если включён.

Хотя.. Можно тупо UAC выключить и начать карновал
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797082
MasterZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpMasterZСейчас хотелось бы узнать по подмене файлов, пока решение не найдено.
Подмена файлов в PF с правами пользователя - это отдельный сервис, который устанавливается вместе с программой и запускается от LocalSystem.

Это я уже писал в начале темы. А дальше вопросы.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797085
MasterZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpНу или как вариант - задание в Task Scheduler'е с повышенными привилегиями и правом на запуск для обычных пользователей.

Scheduler это запуск по времени, а мне нужно по запросу пользователя.
Ставить в Scheduler'е проверку чере 2 сек. по моему это несерьезно.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797090
MasterZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxpcalekcvpИ что, таким образом любой пользователь с ограниченными правами может запустить любое приложение с правами администратора?.. Не зная пароля от учётной записи администратора? Серьёзно?

Любой. Только тебе придётся UAC подтвердить, если включён.

Хотя.. Можно тупо UAC выключить и начать карновал

Я думаю отключать UAC это будет не карнавал, а танцы с бубном.
Про UAC вроде решено нужен сервис, ведь не зря его создаю и Мозила и Адобе ридер и др.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797159
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpYuRockСервис стягивает (можно по запросу) обновление, переименовывает старый экзешник (да, это штатно разрешено, даже он "заблокирован") и переписывает на его место новый. Всё.
https://stackoverflow.com/questions/7147577/programmatically-rename-open-file-on-windows Renaming requires that the file in question was opened with FileShare.Delete sharing. If that share flag is missing, you can not rename/move the file while it is still open.
Вы уверены, что Windows файл на исполнение открывает с этим флагом? Я вот почти уверен что нет.Уверен.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797164
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZalekcvpНу или как вариант - задание в Task Scheduler'е с повышенными привилегиями и правом на запуск для обычных пользователей.

Scheduler это запуск по времени, а мне нужно по запросу пользователя.
Ставить в Scheduler'е проверку чере 2 сек. по моему это несерьезно.Виндовый шедулер очень глючная вещь. Особенно - начиная с висты и по сейчас. Мне пришлось из-за разных его глюков полностью отказаться от него (а юзал я его начиная с NT4 sp2).
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797187
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockВиндовый шедулер очень глючная вещь
а какие уж там болячки, если не секрет? а то у меня он логи архивирует и все такое, несколько лет вроде проблемы обходили стороной
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797205
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavan,

после пары недель работы (запускает задание каждые 5-15 минут) приходится перезагружать винду, т.к. в какой-то момент перестает выгружаться svchost, который шедулер запускает каждый раз при запуске задания, и в итоге заканчивается память и хендлы.
Особенно быстро это проявляется, если запускать консоли (батники).
Проблемы начались (у меня) с приходом Win7. И замечались вплоть до Win10 1803 (скорей всего и в 1809 так). Т.ч. везде заменить пришлось на свой "шедулер" всё.

Единственное, зачем я иногда его теперь использую - это запустить программу "При включении компьютера". Типа вместо службы, если переделывать под службу лень.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797232
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock, жесть какая. у меня на серверных (2012 кажется) месяцами работают, правда запускаются не чаще раза в сутки вроде
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797253
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavanYuRock, жесть какая. у меня на серверных (2012 кажется) месяцами работают, правда запускаются не чаще раза в сутки вродеНу вот, у меня часто было, и - не на серверных.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797338
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockvavanYuRock, жесть какая. у меня на серверных (2012 кажется) месяцами работают, правда запускаются не чаще раза в сутки вродеНу вот, у меня часто было, и - не на серверных.Ну да, получается, у меня в сотни раз чаще запускалось задание (разные задания), и в итоге - винда валилась через 2-3 недели.
Возможно, твой сервер завалится через несколько сотен недель именно по этой причине :)
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797442
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Инсталлятор не обязательно должен иметь сложную логику... ему достаточно уметь запускать другую прогу, сколь угодно большой сложности. Это может быть и сама клиентская прога, запущенная с определенным параметром, например.
В описанной ситуации да, наверно сервис и IPC с клиентской софтиной нормальный вариант.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797537
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxpcalekcvpИ что, таким образом любой пользователь с ограниченными правами может запустить любое приложение с правами администратора?.. Не зная пароля от учётной записи администратора? Серьёзно?
Любой. Только тебе придётся UAC подтвердить, если включён.
Хотя.. Можно тупо UAC выключить и начать карновалЕщё раз: если у пользователя нет прав администратора (вообще), то UAC ему придётся подтверждать с паролем администратора.

MasterZalekcvpНу или как вариант - задание в Task Scheduler'е с повышенными привилегиями и правом на запуск для обычных пользователей.
Scheduler это запуск по времени, а мне нужно по запросу пользователя.
Ставить в Scheduler'е проверку чере 2 сек. по моему это несерьезно.Scheduler это запуск по условию, а не только по времени. В том числе там есть условие "вручную", через API.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797538
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockYuRockпропущено...
Ну вот, у меня часто было, и - не на серверных.Ну да, получается, у меня в сотни раз чаще запускалось задание (разные задания), и в итоге - винда валилась через 2-3 недели.
Возможно, твой сервер завалится через несколько сотен недель именно по этой причине :)

У меня на сервере работает ежудневный бекап SQL-сервера через шедулер месяцами, на десктопе - хром обновления через него проверяет регулярно, ни разу ничего не валилось.
Я не думаю что обновления пользователи будут запускать чаще пары раз в день.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797545
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZ...
Или может я вообще двигаюсь в неправильном направлении?
Ты понимаешь, что после запуска "обновленная программа" не получит доступ к рабочему столу, потому что ее запустит сервис, не имеющий этот доступ?
От сервиса можно получить лишь выполнение привилегированных операций. А контроль за его работой и процесс перезапуска должен выполняться под аккаунтом исходного юзера.

Схема работы может быть, например, следующей.
При старте основного приложения проверять необходимость обновления (особых прав для этого не требуется, надо полагать). Если обновление требуется - запускать специальный "обновлятор" (приложение без привилегий), который в соответствии с требуемой логикой выполняет нужные операции, при необходимости (для выполнения привилегированных операций) обращаясь к сервису. По завершению работы "обновлятор" перезапускает исходное приложение.

MasterZКак потом из сервиса запустить обновленную программу?
Подскажите как запустить сервис из программы?
Надо книжку приобрести, про API Windows. И читать MSDN. Можно, конечно, искать статьи и лопатить форумы, но это не очень умно. В двух словах про сервисы тебе никто не объяснит.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797569
Foxpc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvpЕщё раз: если у пользователя нет прав администратора (вообще), то UAC ему придётся подтверждать с паролем администратора.

Не разу с таким не сталкивался. Но если главная программа запущена от администратора, то последующий запуск другой программы, уже будет без подтверждения UAC
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797571
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я обновляю всё репликацией. Уж правки и мелкие апдейты всегда. И не парюсь особо
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797917
MasterZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GatorА я обновляю всё репликацией. Уж правки и мелкие апдейты всегда. И не парюсь особо

Можно поподробнее, как это через репликации? Я тоже не хочу парится.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797918
MasterZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёСхема работы может быть, например, следующей.
При старте основного приложения проверять необходимость обновления (особых прав для этого не требуется, надо полагать). Если обновление требуется - запускать специальный "обновлятор" (приложение без привилегий), который в соответствии с требуемой логикой выполняет нужные операции, при необходимости (для выполнения привилегированных операций) обращаясь к сервису. По завершению работы "обновлятор" перезапускает исходное приложение.


Ну, вот более менее картина проясняется, спасибо. Будет три екзешника: собственно само приложение, апдейтер и сервис.
Теперь осталось выяснить, как лучше(проще) сделать общение апдейтера с сервисом.
Через TCP мне кажется очень сложно.
Через мютекс?
В идеале чтобы сервис не сканировал каждые 2 сек, а чтобы запускался только во время обновления.
Предложите.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797920
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZёёёёёСхема работы может быть, например, следующей.
При старте основного приложения проверять необходимость обновления (особых прав для этого не требуется, надо полагать). Если обновление требуется - запускать специальный "обновлятор" (приложение без привилегий), который в соответствии с требуемой логикой выполняет нужные операции, при необходимости (для выполнения привилегированных операций) обращаясь к сервису. По завершению работы "обновлятор" перезапускает исходное приложение.


Ну, вот более менее картина проясняется, спасибо. Будет три екзешника: собственно само приложение, апдейтер и сервис.
Теперь осталось выяснить, как лучше(проще) сделать общение апдейтера с сервисом.
Через TCP мне кажется очень сложно.
Через мютекс?
В идеале чтобы сервис не сканировал каждые 2 сек, а чтобы запускался только во время обновления.
Предложите.

Ну, например.
Сервис создает мэилслот и тупо ждет поступления команды.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 fMailslotHandle := CreateMailSlot("Мой мэилслот", 0, MAILSLOT_WAIT_FOREVER, nil);
 fEventHandle := CreateEvent(nil, False, False, "Мой эвент");

while (true) begin
  if WaitForSingleObject(fEventHandle, INFINITE) <> WAIT_OBJECT_0 then
    "все пропало!;

  // Оп-па, да это же нам что-то прислали! 
  Читаем команду из мэилслота, выполняем ее.
end;


Клиент сервиса подключается к мэилслоту и эвенту с такими же именами, отправляет команжду и пинает эвент:

Код: pascal
1.
2.
3.
4.
5.
6.
      fMailslotHandle := GetMailSlotClientHandle("Мой мэилслот");
      // Подключаемся к событию-сигнализации об отправке данных
      fEventHandle := OpenEvent(EVENT_MODIFY_STATE, False, "Мой эвент");

      SendToMailSlot(fMailslotHandle, команда);
      SetEvent(fEventHandle);


Всё... .

Ну, надо разобраться в методах работы с эвентами, мэилслотами, в правилах их наименования и еще в некоторых мелочах.

Может быть, мьютексы задействовать. Например, сервис, при выполнении команд, будет взводить флажок "я работаю". А клиент ждет, чтобы флажок не был взведен.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797922
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZ,
можно пайпы задействовать, вместо мэилслотов. Тоже несложно, и связь двусторонняя.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797981
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockВозможно, твой сервер завалится через несколько сотен недель именно по этой причинене, моему нельзя никак
...
Рейтинг: 0 / 0
Опять обновление программы
    #39797986
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZ,

Ну как?
Пишешь изменения в базу, и она их распространяет.
Заодно с правами легче разобраться. Всё работает через роли и права MSSQL
...
Рейтинг: 0 / 0
Опять обновление программы
    #39798020
MasterZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GatorMasterZ,

Ну как?
Пишешь изменения в базу, и она их распространяет.
Заодно с правами легче разобраться. Всё работает через роли и права MSSQL

Ну, это уже высший пилотаж. У меня программка маленькая и использую sqlite3.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39798115
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZКак потом из сервиса запустить обновленную программу?
Это непростая задача. Можно запустить на текущем рабочем столе, но это мало поможет в случае RDP и/или нескольких рабочих столов.
Так что надо сообщать программам, которые обновляем, что им надо перезапуститься.

MasterZПодскажите как запустить сервис из программы?
OpenSCManager/OpenService/StartService (ControlService), и можно в цикле ждать необходимого состояния с помощью QueryServiceStatusEx.
...
Рейтинг: 0 / 0
Опять обновление программы
    #39799117
MasterZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZalekcvpпропущено...
И что, таким образом любой пользователь с ограниченными правами может запустить любое приложение с правами администратора?.. Не зная пароля от учётной записи администратора? Серьёзно?

пропущено...
Windows - многопользовательская система, кто-то мог работать с этой же программой и не выйти из учётки, после чего зашёл пользователь, который хочет "обновить" приложение. А может программа вообще работает на терминальном сервере, где её запускает куча разных пользователей одновременно.

Насчет этого я придумал как обойти. После того как пользователь нажмет "Обновить" прога посмотрит, есть ли другие пользователи подключенные в данный момент. Если есть, то обновление не выолняется или просит отключить пользователей. Но это потом буду разбираться.

программа при запуске будет создавать мьютекс с именем GetUserDir + 'МОЙ_МЬЮТЕКС'.
при обновлении прога проверит есть ли мьютексы с именами всех пользователей.
Как получить список пользователей?
...
Рейтинг: 0 / 0
Опять обновление программы
    #39799432
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZпрограмма при запуске будет создавать мьютекс с именем GetUserDir + 'МОЙ_МЬЮТЕКС'.
при обновлении прога проверит есть ли мьютексы с именами всех пользователей.
Как получить список пользователей?
Легче создавать (первый экземпляр) / открывать (все последующие) мьютекс/событие. Проверять инсталлятором через OpenEvent. При закрытии экземпляра ссылка на объект сама удалится, если ссылок нет - объект уничтожится
...
Рейтинг: 0 / 0
62 сообщений из 62, показаны все 3 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Опять обновление программы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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