007wan |
Отправлено: 24 Августа, 2019 - 14:30:38
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
А как вернуть путь программы, используя только имя.
Например, есть программа под названием "prog1", она не инсталированна на компьютере, а просто лежит в папке как приложение. Как ее найти, даже если ее переместят и где бы она не была, она всегда будет найдена и даже если будут экземпляры, то они все тоже будут найдены. Нужно вернуть путь этой(этих) программ.
(Добавление)
Kibor пишет: 007wan пишет: Да, но бинарный режим это в функции fwrite префикс "rb" вообще-то.
fwriteb не fwrite
Это разные функции. и fwriteb нету в описании. |
|
|
Zireael |
Отправлено: 24 Августа, 2019 - 14:47:51
|
Эксперт
Покинул форум
Сообщений всего: 4462
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: fwriteb нету в описании.
Есть https://kibor-bot.com/forum/topi...m=1&topic=33
Цитата: А как вернуть путь программы, используя только имя.
Перебрать все файлы на всех дисках. |
|
|
007wan |
Отправлено: 24 Августа, 2019 - 15:21:50
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: fwriteb нету в описании.
Есть https://kibor-bot.com/forum/topi...m=1&topic=33
Цитата: А как вернуть путь программы, используя только имя.
Перебрать все файлы на всех дисках. Да не было! вот отвечаю, я построчно даже проверял.
(Добавление)
А функция ридбуф. Буфер от кибора сохраняет значения навсегда? или обнуляется после закрытия? а может перезагрузки?
(Добавление)
Kibor , Как работает у тебя обновление программы, я просто не могу понять от чего отталкиваться, но есть пару идей. Интересует одна вещь, но сначала ввиду в курс дела)
У тебя при запуске Kibor запрашивает новую версию или же если ее нету, то ничего не делает, а просто запущена программа, но если запустим Update, то он запускает снова Kibor при условии, что тоже нету обновлений, где у тебя код размещен и какой? Просто не могу понять: Роль Update в твоей программе и куда идут нити и как вообще она у тебя устроена, потому что я столкнулся с проблемой, которую я могу решить, но не уверен, что решу именно правильно. Проблема: У меня модуль "проверки, сверки версий" стоит в основной программе, а программа "**********_Update.exe" в ней код (Отобразить)CODE:external(INT, "MessagBeep", "MessageBeep", "user32.dll");
external(INT, "my_message", "MessageBoxA", "user32.dll");
#definefile "C:\Users\Home\Desktop\МОЁ\Kibor\Constants.txt";
char File_Exe[10000000];
int count_symbol = sendgetweb(#File_Exe[0], "", "GET", "http:/"+"/**********.zzz.com.ua", **********.exe");
if (count_symbol > 0)
{
if(fopen("C:\Users\Home\Desktop\МОЁ\Kibor\**********.exe", "wb"))
{
fwriteb(#File_Exe[0], count_symbol);
fclose();
MessageBeep(MB_OK);
my_message(0, "Программа была успешна обновлена.", "", MB_OK | MB_ICONINFORMATION | MB_TOPMOST);
}
}
else
{
MessageBeep(MB_ICONEXCLAMATION);
my_message(0, "Не удалось скачать **********.exe", "", MB_OK | MB_ICONERROR | MB_TOPMOST);
} Как видим если запустить "код", то он сразу скачивает файл с сервера и сразу заменяет старый на новый, причем без "проверки". Как сделать? |
|
|
007wan |
Отправлено: 24 Августа, 2019 - 15:54:44
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: причем без "проверки". Как сделать?
Добавить проверку. Я думал об этом, но получается проверка будет и в основной программе и в update.exe, и когда я запущу основную программу нажму "Обновить", то он проверить обновление и запустит update.exe, которая тоже проверит и уже скачает новый.exe файл. К чему это дублирование?
(Добавление)
А если отдельно запускать update.exe, то там не помешает проверка.
(Добавление)
Ага! и минус в том, что если проверка будет и даже в update.exe, то нам придется и обновлять Update.exe, т.к проверка если ты заметил имеет текст из сервера и текст, который забит в переменных этой программы.
(Добавление)
Придумал кое-что: Нужно общение между программой.
Если запустим только update, то он будет читать буфер, если он пуст, то ничего не скачивать. ЗАпускаем основную - печатаем в буфер или отправляем update'ру, что надо обновить и запускаем его, дальше он всё делает то, что нужно и уже обнуляет буфер
(Добавление)
Вот готовая, но не идеальная.
Для основного exe (Отобразить)CODE:string Version_Program = "1.0";
char New_Version_Program[100000];
char Command[1];
if (sendgetweb(#New_Version_Program[0], "", "GET", "http:/"+"/(*****).zzz.com.ua", "K2019Bot Versions.txt") > 0)
{
if(formatsn(format(#New_Version_Program[0])) > formatsn(Version_Program))
{
MessageBeep(MB_ICONEXCLAMATION);
int result_message3 = my_message(0, "Найдена новая версия программы."+formatic(13)+formatic(10)+
"Текущая : v"+Version_Program+formatic(13)+formatic(10)+
"Последняя: v"+format(#New_Version_Program[0])+formatic(13)+formatic(10)+formatic(13)+formatic(10)+
"Внимание! Эта версия программы будет удалена."+formatic(13)+formatic(10)+
"Обновить программу?", "*****", MB_YESNO | MB_ICONQUESTION | MB_TOPMOST);
if (result_message3 == 6)
{
write_buffer("1", 1);
}
}
else
{
if(formatsn(format(#New_Version_Program[0])) == formatsn(Version_Program))
{
MessageBeep(MB_OK);
my_message(0, "У вас последняя версия программы.", "*****", MB_OK | MB_ICONINFORMATION | MB_TOPMOST);
}
}
}
else
{
MessageBeep(MB_ICONEXCLAMATION);
my_message(0, "Не удалось подключиться к серверу. Пожалуйста повторите попытку позже.", "*****", MB_OK | MB_ICONERROR | MB_TOPMOST);
}
Для update.exe (Отобразить)CODE:external(INT, "MessagBeep", "MessageBeep", "user32.dll");
external(INT, "my_message", "MessageBoxA", "user32.dll");
#definefile "C:\Users\Home\Desktop\МОЁ\Kibor\Constants.txt";
char File_Exe[10000000];
char Command[1];
readbuffer(#Command[0], 1);
if(Command[0] == "1")
{
int count_symbol = sendgetweb(#File_Exe[0], "", "GET", "http:/"+"/(*****).zzz.com.ua", "K2019Bot.exe");
if (count_symbol > 0)
{
if(fopen("C:\Users\Home\Desktop\МОЁ\Kibor\*****.exe", "wb"))
{
fwriteb(#File_Exe[0], count_symbol);
fclose();
MessageBeep(MB_OK);
my_message(0, "Программа была успешна обновлена.", "*****", MB_OK | MB_ICONINFORMATION | MB_TOPMOST);
}
}
else
{
MessageBeep(MB_ICONEXCLAMATION);
my_message(0, "Не удалось скачать .exe", "*****", MB_OK | MB_ICONERROR | MB_TOPMOST);
}
}
else
{
//Запустить основную программу, что бы пользователь нажал на "Обновить" и выполнился код для передачи команды: Command = 1;
//Тогда после этого Основная автоматически запустит это, выполнив условие и сделает еще Command = 0;
}
(Добавление)
Тоесть теперь можно по отдельности запускать update.exe и ничего не удалит и не скачает или переустановит, пока не зайдете в основу и не нажмете проверить, а если все таки запустили update, то он вам откроет основу
(Добавление)
Опять ошибка с буферами. |
|
|
|