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


Эксперт

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

|
Kibor пишет: (С реальными логинами и паролями и доменами куда подключаетесь.) Я не понимаю. Кто и как узнает пароли и логины реальные?
(Добавление)
Собрал и запустил Код (Отобразить)CODE:#define GENERIC_READ -2147483648
#define INTERNET_FLAG_TRANSFER_ASCII 1
#define INTERNET_FLAG_NO_CACHE_WRITE 67108864
#define INTERNET_DEFAULT_FTP_PORT 21
#define INTERNET_SERVICE_FTP 1
#define INTERNET_FLAG_PASSIVE 134217728
external(INT, "InternetOpen", "InternetOpenA", "Wininet.dll");
external(INT, "InternetCloseHandle", "InternetCloseHandle", "Wininet.dll");
external(INT, "InternetConnect", "InternetConnectA", "Wininet.dll");
external(INT, "FtpOpenFile", "FtpOpenFileA", "Wininet.dll");
external(INT, "InternetReadFile", "InternetReadFile", "Wininet.dll");
external(INT, "FtpSetCurrentDirectory", "FtpSetCurrentDirectoryA", "Wininet.dll");
string ftp=""; // фтп
string login=""; // логин
string pass=""; // пароль
string name_file="K2019Bot Versions.txt"; // имя файла
int open, _close, connect, hfile, catalog, count_read_bytes;
char text[999999];
open=InternetOpen("Microsoft Internet Explorer", 0, 0, 0, 0);
connect=InternetConnect(open, ftp, INTERNET_DEFAULT_FTP_PORT, login, pass, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
catalog=FtpSetCurrentDirectory(connect, ftp); // возможно без этого будет работать
hfile=FtpOpenFile(connect, name_file, GENERIC_READ, INTERNET_FLAG_TRANSFER_ASCII, INTERNET_FLAG_NO_CACHE_WRITE, 0);
//messagebox(hfile); // если файл открылся будет не 0
if(hfile>0)
{
InternetReadFile(hfile, address(#text[0]), sizearray(text), address(#count_read_bytes));
messagebox("Прочитано байт: "+format(count_read_bytes));
if(count_read_bytes>0)messagebox(format(#text[0], count_read_bytes));
}
_close=InternetCloseHandle(connect); Всё нормально.
(Добавление)
Программа не будет обновляться, а будет просто скачана новая exe. А старая будет удалена в будуем сделаю. |
|
|
ivantu |
Отправлено: 22 Августа, 2019 - 13:18:03
|


Эксперт

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

|
автообновление, я давал ссылку выше, там вся суть расписана, нужно лиш использовать функции кибора.
(Добавление)
вот мой алгоритм:
этот код вставить в начало:
CODE:string curVersion="2.0";
string versionRemote;
string temp_remote,temp_cur;
string ftp="****.zzz.com.ua"; // фтп, исправить на свой
string login="***"; // исправить на свой
string pass="****"; // исправить на свой
int open, _close, connect, file, catalog;
external(INT, "InternetOpen", "InternetOpenA", "Wininet.dll" );
external(INT, "InternetCloseHandle", "InternetCloseHandle", "Wininet.dll" );
external(INT, "InternetConnect", "InternetConnectA", "Wininet.dll" );
external(INT, "FtpSetCurrentDirectory", "FtpSetCurrentDirectoryA", "Wininet.dll" );
external(INT, "FtpGetFile", "FtpGetFileA", "Wininet.dll" );
#icon "C:\Kibor_set\***\16.bmp" "C:\Kibor_set\***t\32.bmp"
if(sendgetweb(#versionRemote, "", "GET", "http:/"+"/*****.zzz.com.ua", "/version.txt")>0)
{
regexreplace(-1, #temp_remote, versionRemote, "[.]", "");
regexreplace(-1, #temp_cur, curVersion, "[.]", "");
if (formatsn(temp_cur) < formatsn(temp_remote)) {
messagebox("Обнаружена новая версия бота "+versionRemote+formatic(13)+formatic(10)+
"Приложение будет автоматически обновлено и перезапущено");
open=InternetOpen("Microsoft Internet Explorer", 0, 0, 0, 0);
connect=InternetConnect(open, ftp, 21, login, pass, 1, 134217728, 0);
catalog=FtpSetCurrentDirectory(connect, ftp);
file=FtpGetFile(connect, "*****.exe", "temp_****.exe", 0, 0, 0); // скачать файл в папку с кибор
_close=InternetCloseHandle(connect);
while(file==0){sleep(500);}
start (pathfolder()+"updater.exe");
close();
}
(Добавление)
создать updater.exe с вот таким содержимым и положить рядом с исполняемым файлом бота:
CODE:INITDIALOG
{
#icon "C:\Kibor_set\***\16.bmp" "C:\Kibor_set\***\32.bmp"
}
if(fopen(pathfolder()+"temp_****.exe", "rb"))
{
fclose();
external(INT, "DeleteFile", "DeleteFileA", "kernel32.dll");
DeleteFile(pathfolder()+ "****.exe");
sleep(500);
external(INT, "MoveFile", "MoveFileA", "kernel32.dll");
MoveFile(pathfolder()+"temp_****.exe", "***.exe");
sleep(500);
//Запустить Updater
start (pathfolder()+"****.exe");
close();
}
else {
messagebox("Новая версия не обнаружена");
close();
}
(Добавление)
все **** - поменять на свои. |
|
|
007wan |
Отправлено: 22 Августа, 2019 - 13:29:50
|


Эксперт

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

|
Ну принцип очень поняте и примерно такой же как я и хотел, но это понятно, что Запущенная exe сама себя удалить не может и тогда ты запускаешь другую собранную, что бы закрыть ее и удалить, а как ты будешь бороться с тем, что твой updater.exe, который удаляет старую может его удалят кто-нибудь на компе? Как с этим бороться? Я предалагаю закинуть его в Temp, а потом каждый раз как обновление завершено и новая версия скачана - то запускать его. Ну или можно снова с сервера его скачивать и так же запускать.
(Добавление)
И у тебя принцип слишком мне кажется нужно его доработать, что бы при запрашивании обновлений, он получал версию с сервера, записывал ее в файл и кидал в папку Temp, что бы при открытии он ее запоминал, а то ты пока не нажмешь кнопку не узнает что есть новая, а так при запуске оповестит и даже если он уже была скачанна - запустит.
(Добавление)
Сделаю потом как мне нудо. Спасибо вам всем за помощь. |
|
|
|