007wan |
Отправлено: 22 Августа, 2019 - 13:44:35
|


Эксперт

Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2

|
ivantu пишет: Принцып не уловил, при запуске программы, она проверяет версию прописанную в ней с той что на сервере и если на сервере версия более свежая , скачивает указанный exe с отличным именем к примеру я добавил temp_названиебота.exe , после скачки программа запускает apdater.exe и закрывает запущеного бота удалает его и переименовывает temp_названиебота.exe в просто названиебота.exe ничего лишнего не удалится, там все конкретно прописано, затем запускает новую версию.
начиная со слова "Если", то можно добавить еще, что бы он более свежую версию закачивал в файл в папку Temp(Временное хранилище), что бы при запуске не нажимать "Обновить", а просто он ее сравнит версию проги запущенной с версией той, что в файле и запросит уже на установку, т.к уже ранее была получена версия и уже скачана. + в том, что не понадобится новое соединение к серверу, даже если интернета нету. |
|
|
007wan |
Отправлено: 22 Августа, 2019 - 14:21:53
|


Эксперт

Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2

|
Ок
(Добавление)
Вот что у меня вышло. Сканируйте.
Пока только получает версию, а дальше будет проще простого. (Отобразить)CODE:function Update()
{
//Stop_Script("", 0);
int Open_Internet, Close, Connect_Internet, Open_File, Catalog, Count_Butes;
string FTP_Name = "";
string Login = "";
string Password = "";
string File_Name = "";//имя файла на сервере
string Version_Program = "1.0";//версия собранной
char New_Version_Program[999999];//версия из сервера(новая)
Open_Internet = InternetOpen("Microsoft Internet Explorer", 0, 0, 0, 0);
Connect_Internet = InternetConnect(Open_Internet, FTP_Name, INTERNET_DEFAULT_FTP_PORT, Login, Password, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
if (Connect_Internet == 0)
{
MessageBeep(MB_ICONEXCLAMATION);
my_message(0, "Не удается подключиться к серверу. ", "", MB_OK | MB_ICONERROR | MB_TOPMOST);
}
else
{
Catalog = FtpSetCurrentDirectory(Connect_Internet, FTP_Name);
Open_File = FtpOpenFile(Connect_Internet, File_Name, GENERIC_READ, INTERNET_FLAG_TRANSFER_ASCII, INTERNET_FLAG_NO_CACHE_WRITE, 0);
if(Open_File > 0)
{
InternetReadFile(Open_File, address(#New_Version_Program[0]), sizearray(New_Version_Program), address(#Count_Butes));
if(Count_Butes > 0)//если файл версии весит больше 0
{
if(formatsn(format(#New_Version_Program[0], Count_Butes)) > formatsn(Version_Program))//если версия собранной выше той которой на сервере
{
my_message(0, "Найдена новая версия программы "+format(#New_Version_Program[0], Count_Butes), "", MB_OK | MB_ICONINFORMATION | MB_TOPMOST);
}
if(formatsn(format(#New_Version_Program[0], Count_Butes)) == formatsn(Version_Program))//если одинаковая
{
my_message(0, "У вас последняя версия программы.", "", MB_OK | MB_ICONINFORMATION | MB_TOPMOST);
}
}
Close = InternetCloseHandle(Connect_Internet);
}
}
}
(Добавление)
Прекрасно работает. Сейчас проверил. На сервере поставил в блокноте 1.1, и показало, что есть новая версия, а потом 1.0 и все - типа уже актуальная стоит.
(Добавление)
Даже есть такая функция для фтп что-то вроде гет сизэ, она о том, что получает вес файла и можно даже сделать полосу загрузку исходя из этого. Но это лишнее думаю.
(Добавление)
А можно ли создать какой-нибудь сервис, который будет работать независимо от работы программы, которая его запустила?
Тоесть: запускаем программу, которая запускает сервис(задачу или процесс), и эту программу можно закрыть, удалить, уничтожить или еще чего, но сервис будет работать до тех пор, пока я не запущу программу эту же и не дам команду на остановку сервиса. есть такое? |
|
|
ivantu |
Отправлено: 22 Августа, 2019 - 15:03:40
|


Эксперт

Покинул форум
Сообщений всего: 732
Дата рег-ции: Нояб. 2013
Репутация: 14

|
подсказка:
Цитата:
после создания диалога необходимо показать его с помощью вызова showdialog
showdialog(0, "заголовок", позицияX, позицияY, ширина, высота, 1, 0);
первый - номер созданного диалога.
седьмой: 0 - при нажатие крестика (закрыть) скрывает окно. вызвать его можно опять только программно. 1 -при нажатие крестика (закрыть) останавливает скрипт. 2 - при нажатие крестика (закрыть) сворачивает окно, 3 - при нажатие крестика закрывает программу, 4 - при нажатие на крестик данное действие игнорируется и можно обработать сообщение WM_CLOSE.
восьмой ... 0 - окно обычное.. 1- находится поверх всех окон..
при необходимости диалог можно скрыть вызвав hidedialog
hidedialog(0);
и уничтожить
destroydialog(0);
В принципе кибор следит за тем что бы не пропускать ошибки связанные с уничтожением созданием и если не уничтожили и опять создаете под таким номеров уничтожит сам. как и в конце работы скрипта тоже..
gethwnd(0);
Возвращает HWND созданного диалогового окна с помощью createdialog, для использования в WinApi.
gethwnd
================================================================================================================================ ========================
|
|
|
007wan |
Отправлено: 22 Августа, 2019 - 15:07:39
|


Эксперт

Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2

|
Ох, эта дичь сильно разогревает мозг.
(Добавление)
ivantu пишет: я кажется понял , смысл тайно запустить программу, которая проверяет постоянно новую версию, если есть скачивает а только после этого запускает процесс обновления, или предлагает при перезапуске обновить на новую версию. Неть) Запускаешь основную программу, находит обновление, скачивает, запускает потом или службу или чего там нужно, потом закрывает эту программу(процесс закрывает или служба) и удаляет ее и запускает новую(или же заменяет служба старую прогу на новую) и никакие новые exe не нужно, но я не поэтому за это решился взяться, а потому что это новые код, новая фича и вообще мне нравится что-то новое узнавать, но всегда всё понятное.
(Добавление)
Просто у меня в программе всё есть, даже иконка на диалог своя, но я же жадный и хочу всё новое и иногда мне даже это не нужно, хотя я прошу что-нибудь, но так если не мне это нужно будет, а хотя бы другим в первую очередь, а самому интересно будет посмотреть как это работает и принцип работы.(Отредактировано автором: 22 Августа, 2019 - 15:16:28) |
|
|
007wan |
Отправлено: 23 Августа, 2019 - 09:40:40
|


Эксперт

Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2

|
Как сделать эту функцию? Она на панели задач отображает программу.
Я пробовал сам, но не могу заполнить структуру.
Всё начинается с Shell_NotifyIconA Там самое легкое, но там требует структуру, я не могу заполнить и не могу понять откуда какие данные брать, хотя пробовал заполнить ее как другие предыдущие структуры(FLASHWINFO, BLENDFUNCTION, TRIVERTEX)[Думал по шаблону получится заполнить]. Они почти одинаковые, но я не знаю что заполнять в первом параметре в структуре NOTIFYICONDATAA, которая потом нужна будет для Shell_NotifyIconA. Первый параметр "Размер этой структуры", я понятия не имею что имеется ввиду: количество параметров или символов или чего вообще?
(Добавление)
Что не так? code (Отобразить)CODE:external(INT, "ShellMessageBox", "ShellMessageBoxA", "Shlwapi.dll" );
#definefile "C:\Users\Home\Desktop\МОЁ\Kibor\Constants.txt";
#define MNS_NOTIFYBYPOS 134217728
#define MIM_STYLE 16
#define MF_POPUP 16
external(INT, "CreateMenu", "CreateMenu", "User32.dll" );
external(INT, "CreatePopupMenu", "CreatePopupMenu", "User32.dll" );
external(INT, "AppendMenu", "AppendMenuA", "User32.dll" );
external(INT, "SetMenuInfo", "SetMenuInfo", "User32.dll" );
external(INT, "SetMenu", "SetMenu", "User32.dll" );
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
int MENUINFO[7]={28, MIM_STYLE, 0, 0, 0, 0, 0};
int HMENU;
HMENU=CreateMenu();
AppendMenu(HMENU, MF_POPUP, 1, "Настройки" );
createdialog(0);
createdialog(1);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
loop()sleep(1);
function getmessage(0, WM_CREATE)
{
SetMenuInfo(HMENU, address(#MENUINFO[0]));
SetMenu(gethwnd(0), HMENU);
ShellMessageBoxA(0, gethwnd(0), "Текст", "Заголовок", MB_OK | MB_ICONERROR | MB_TOPMOST);//Error
}
(Добавление)
Как заполнить структуру DRAWITEMSTRUCT?(Отредактировано автором: 23 Августа, 2019 - 09:41:36) |
|
|
|