Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/29: Рейтинг темы: голосов - 29, средняя оценка - 4.76
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1

Portable версия программы

10.06.2012, 13:57. Показов 6089. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Появилась нужда создать портабл версию программы...что бы не мусорила в системе и не сохраняла лог)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
void __fastcall TMain::FormActivate(TObject *Sender)
{
    // ñïèñêè
    if ( !FileExists( "log.txt" ) ) {         //ïðîâåðêà åñëè íå ñóùåñòâóåò ôàéë
        List->Add( "Óòèëèòà Flash Cleaner" );  //çàïèñûâàåòñÿ â ôàéë
        List->SaveToFile( "LOG.txt" );            //ñîçäàåò åãî
    }
    if ( !FileExists( "spisok.txt" ) ) {   //ïðîâåðêà åñëè íå ñóùåñòâóåò ôàéë
        Blacklist->Lines->SaveToFile( "spisok.txt" );    //ñîçäàåò åãî
    }
    if ( !FileExists( "spisok.ini" ) ) {    //ïðîâåðêà åñëè íå ñóùåñòâóåò ôàéë
        Extensions->Lines->SaveToFile( "spisok.ini" );     //ñîçäàåò åãî
    }
    if ( !FileExists( "Cleaner.bat" ) ) {   //ïðîâåðêà åñëè íå ñóùåñòâóåò ôàéë
        Avir->Lines->SaveToFile( "Cleaner.bat" );    //ñîçäàåò åãî
    }
    if ( !FileExists( "data.dat" ) ) {         //ïðîâåðêà åñëè íå ñóùåñòâóåò ôàéë
        List->Add( "Admin=52757E7A7F" );  //çàïèñûâàåòñÿ â ôàéë
        List->SaveToFile( "data.dat" );            //ñîçäàåò åãî
    }
    Blacklist->Lines->LoadFromFile("Spisok.txt");
    Extensions->Lines->LoadFromFile("spisok.ini");
    Avir->Lines->LoadFromFile("Cleaner.bat");     //çàãðóæàåì ôàéë Cleaner.bat
    Log->Lines->LoadFromFile( "LOG.txt" );     //çàãðóæàåì ôàéë log.txt â memo
 
   if (!DirectoryExists(ExtractFilePath(Application->ExeName))) {
//------------------------------------------------------------------------------------------
void __fastcall TMain::FormClose(TObject *Sender, TCloseAction &Action)
{
    if (!DirectoryExists(ExtractFilePath(Application->ExeName))) {
        return;
    }
    else {
        Log->Lines->SaveToFile("Log.txt"); // ñîõðàíÿåì â ôàéë Log.txt
        Ini->WriteString("Labels","Label2",Label2->Caption);
    }
нужно как то обойтись без этого, это не совсем Portable просто нужно если программа запущена с флэшки то не создавать эти файлы
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.06.2012, 13:57
Ответы с готовыми решениями:

Существует ли portable версия borland 6.0 c++(для флешки)?
Существует ли portable версия borland 6.0 c++(для флешки)?

FireFox Portable требуется русскоязычная версия
Требуется русскоязычная версия FireFox Portable 58+ (без отдельной русификации) Желательно проверенную ссылку. Win 7/32 Пользуюсь...

Существует ли портативная версия (portable) Visual Studio 2012?
существует ли? кто-нибудь пытался собирать вручную? у меня были попытки с cameyo, но не получилось. а было бы удобно. спасибо)

23
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.06.2012, 14:35
Так проверяй диск на котором запущена программа -флеш/не флеш?
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2012, 17:23  [ТС]
C++
1
if (!DirectoryExists(ExtractFilePath(Application->ExeName)))
я вот так и проверял если нет директории просто закрывается без сохранения, а если папка скрытая и т.д или программа запущена с флэшки, и флэшка переставлена (достали и вставили обратно) в пк, не сохраняется и получаем кучу ошибок
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.06.2012, 17:29
ExtractFileDrive() и проверяй является диск флешкой с помощью WinApi
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.06.2012, 17:31
1. "log.txt" и "LOG.txt" - так задумано ?
2. Если просто сохранять лог в каталог программы - независимо от того, с какого носителя программа запущена - на флешку не сохраняет ?
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2012, 17:40  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
1. "log.txt" и "LOG.txt" - так задумано ?
не опечатка)

Цитата Сообщение от LK Посмотреть сообщение
2. Если просто сохранять лог в каталог программы - независимо от того, с какого носителя программа запущена - на флешку не сохраняет ?
Программа запущена с флэшки
Сохраняет.
Но если флэшку достали - Программа просто не закрывается)
Если флэшку достали и вставили обратно ошибка не могу сохранить файл
Миниатюры
Portable версия программы  
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2012, 18:14  [ТС]
Полный код выхода
C++
1
2
3
4
5
6
7
8
    if (!DirectoryExists(ExtractFilePath(Application->ExeName))) {  //åñëè îòñóñòâóåò äèðåêòîðèÿ
        return;           //âûõî
    }
    else {
        Log->Lines->SaveToFile("Log.txt"); // ñîõðàíÿåì â ôàéë Log.txt
        Ini->WriteString("Labels","Label2",Label2->Caption); //ñîõðàíÿåì çíà÷åíèå â  Ini ôàéë
    }
    Application->Terminate( ); //Âûõîä
Добавлено через 32 минуты
Avazart, так тоже самое
C++
1
2
3
4
5
6
7
8
9
   if (!DirectoryExists(ExtractFilePath(Application->ExeName))) {  //åñëè îòñóñòâóåò äèðåêòîðèÿ
    ExtractFileDrive(Application->ExeName)==Edit1->Text;
        return;           //âûõî
    }
    else {
        Log->Lines->SaveToFile("Log.txt"); // ñîõðàíÿåì â ôàéë Log.txt
        Ini->WriteString("Labels","Label2",Label2->Caption); //ñîõðàíÿåì çíà÷åíèå â  Ini ôàéë
    }
    Application->Terminate( ); //Âûõîä
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.06.2012, 18:20
Ловите отсоединение флешки и закрывайте принудительно программу - по-моему, в ваших тема про пен-драйв многое подобное обсуждалось.

Добавлено через 3 минуты
Ну и есть два пути .
1. Как сделать portable / портабл программу?
2. Portable — вот она радость!
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2012, 18:23  [ТС]
LK, понимаете такая ситуация программа запускается с флешек для работы на 20 пк, всем лень скопировать программу на пк , распространяется через одну и туже флэшку на все пк ...
А вот закрыть программу уже не получается...и ко мне идут все претензии)
Как на пример можно поверить если программа запущена НЕ С HDD то просто закрываем.но мы получаем в Edit2 только последний диск по счёту HDD
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.06.2012, 18:29
Какая разница - на одном или на 20и в плане "закрыть программу уже не получается" ? Если выдернуть флешку, то прогу не закрыть ? Или не закрыть скопированную на ж/д программу? Ищите, что ее держит привязаной к флешке.
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2012, 18:32  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
Если выдернуть флешку, то прогу не закрыть ?
Ага
Цитата Сообщение от LK Посмотреть сообщение
Или не закрыть скопированную на ж/д программу?
Тут всё ок, сохраняет и закрывает

Добавлено через 1 минуту
Вот весь код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void __fastcall TMain::FormClose(TObject *Sender, TCloseAction &Action)
{
    if (!DirectoryExists(ExtractFilePath(Application->ExeName))) {
        return;
    }
    else {
        Log->Lines->SaveToFile("Log.txt"); // ñîõðàíÿåì â ôàéë Log.txt
        Ini->WriteString("Labels","Label2",Label2->Caption);
    }
    {
        if ( Settings->CheckBox3->Checked ) {
            Action=caNone; // Ïðåðâàòü êîìàíäó çàêðûòèÿ, äàëåå íîâàÿ êîìàíäà
            Application->ShowMainForm = false;
            ShowWindow(Handle,SW_HIDE); // Ñêðûâàåì ïðîãðàììó
            ShowWindow(Application->Handle,SW_HIDE); // Ñêðûâàåì êíîïêó ñ TaskBar'à
        }
    }
}
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.06.2012, 18:48
Взял две проги, состоящие из одного ЕХЕ - ColorPic.exe, Convert.exe , скопировал на флешку, запустил, нагло выдернул флешку, закрыл обе программы, для Convert.exe получил сообщение "Диск не найден", видимо, хотело что-то-куда-то записать. И все. Никаких проблем. Ищите, что держит вашу прогу на флешке - может, она упорно что-то пытается писать?
Это, случайно, не ваше :
Диски в системе?

Добавлено через 7 минут
а пропишите-ка код не FormClose, а в FormCloseQuery
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2012, 19:06  [ТС]
LK,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
void __fastcall TMain::FormClose(TObject *Sender, TCloseAction &Action)
{
 
//Сворачивание программы в трей вместо закрытия если стоит чекбокс
    if (!DirectoryExists(ExtractFilePath(Application->ExeName))) {
        return;
    }
    else {
        Log->Lines->SaveToFile("Log.txt"); // ñîõðàíÿåì â ôàéë Log.txt
        Ini->WriteString("Labels","Label2",Label2->Caption);
    }
    {
        if ( Settings->CheckBox3->Checked ) {
            Action=caNone; // Ïðåðâàòü êîìàíäó çàêðûòèÿ, äàëåå íîâàÿ êîìàíäà
            Application->ShowMainForm = false;
            ShowWindow(Handle,SW_HIDE); // Ñêðûâàåì ïðîãðàììó
            ShowWindow(Application->Handle,SW_HIDE); // Ñêðûâàåì êíîïêó ñ TaskBar'à
        }
    }
}
//---------------------------------------------------------------------------
 
void __fastcall TMain::FormCloseQuery(TObject *Sender, bool &CanClose)
{ //не знаю зачем
    if (!DirectoryExists(ExtractFilePath(Application->ExeName))) {
        return;
    }
    else {
        Log->Lines->SaveToFile("Log.txt"); // ñîõðàíÿåì â ôàéë Log.txt
        Ini->WriteString("Labels","Label2",Label2->Caption);
    }
}
//---------------------------------------------------------------------------
 
void __fastcall TMain::N16Click(TObject *Sender)
{ //выход с трея
    if (!DirectoryExists(ExtractFilePath(Application->ExeName))) {  //åñëè îòñóñòâóåò äèðåêòîðèÿ
        return;           //âûõî
            Close();
    }
    else {
        Log->Lines->SaveToFile("Log.txt"); // ñîõðàíÿåì â ôàéë Log.txt
        Ini->WriteString("Labels","Label2",Label2->Caption); //ñîõðàíÿåì çíà÷åíèå â  Ini ôàéë
    }
      Close();
    Application->Terminate( ); //Âûõîä
}
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.06.2012, 19:17
шо - ЛК ?
и зачем лепить код в оба события (кнопка не в счет) ?
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2012, 19:34  [ТС]
LK, удалил лишний код
Теперь когда нет флэшки в системе программа сворачивается а не закрывается...закрыть её не возможно
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.06.2012, 19:41
EdarGp, дык, уже прогресс .
Знать бы еще, какой код и в каком событии остался.

Добавлено через 1 минуту
Теперь делаем через жопу одно место - перехватываем событие сворачивания (OnMinimize) и пробуем грохнуть программу.
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2012, 20:12  [ТС]
LK, Вот переписал проект может посмотрите
если с Hdd - Всё ок
Если с флэшки - всё ок
Если запустил с флэшки и флэшку достал - 0 реакции на закрытие
Если запустил с флэшки и флэшку достал и обратно вставил и пробуешь закрыть ошибка не могу создать файл
Вложения
Тип файла: rar exit.rar (39.8 Кб, 11 просмотров)
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
10.06.2012, 21:51
if (!DirectoryExists(ExtractFilePath(Applic ation->ExeName))) {
return;
}
else {
Memo1->Lines->SaveToFile("Log.txt"); // сохраняем в файл Log.txt
А зачем проверяется каталог приложения, если потом сохранение идёт непоймикуда?
if (!DirectoryExists(ExtractFilePath(Applic ation->ExeName))) { //если отсуствует директория
return; //выхо
Если каталог не найден, то выхода не произойдет, return - возврат из функции, а не выход

Добавлено через 12 минут
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
    if (CheckBox1->Checked==true ) {
        Action=caNone; // Прервать команду закрытия, далее новая команда
        Application->ShowMainForm = false;
        ShowWindow(Handle,SW_HIDE); // Скрываем программу
        ShowWindow(Application->Handle,SW_HIDE); // Скрываем кнопку с TaskBar'а
    }
}
Действительно, что это она вместо закрытия сворачивается? Такое ощущение, что намешали в код всё, что знали и смогли применить. Абсолютно бессмысленно.
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
10.06.2012, 21:53  [ТС]
mimicria, а что проверять?ExtractFileDrive?

Добавлено через 1 минуту
mimicria, 100% сворачивалась...
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
10.06.2012, 22:12
C++
1
2
3
4
5
6
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if (DirectoryExists(ExtractFilePath(Application->ExeName))) 
       Memo1->Lines->SaveToFile(ExtractFilePath(Application->ExeName)+"Log.txt");
Application->Terminate();
}
Остальное нафиг убрать
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.06.2012, 22:12
Помогаю со студенческими работами здесь

POrtable последняя версия Opera или открыть две копии браузера
Существуют ли где-то нормальны портабле сборки последлних версий оперы? Есть необходимость иметь 2 оперы с разным наобором...

Где убедиться, что версия С11 для Си используется в сборке Dev-Cpp 5.7.1 MinGW 4.8.1 Portable?
Читал, что это заложено в этом дистрибутиве. Хочется дополнительно увидеть в настройках программы или в выводе на экран.

Portable программы для Linux Live
Для Винды любая программа по сути уже может запускаться с флешки без установки, А как такое реализовать в убунту Лайв например - насколько...

Portable-версии программы вместо инсталированных
доброго времени суток, уважаемые форумчане! хотелось бы спросить совета: не так давно задумалась на тему использования...

Подскажите как сделать Portable-версию программы?
Нужно сделать портативную версию проги !! Пробовал прогой VMware ThinApp Project North Star («Проект Северная звезда», в прошлом Thinstall...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru