Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
Ddv122
Почемучка)
1241 / 301 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
1

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

10.06.2012, 13:57. Просмотров 3067. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2012, 13:57
Ответы с готовыми решениями:

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

Откомпилировать проект с builder2010 (версия 14) на builderXE (версия 15)
добрый день! вот такая проблема не могу откомпилировать проект с builder2010 (версия 14) на...

c++ builder portable
скажите ,существует ли portable-версия Borland C++ Builder 6?

OLE и Word portable
Здравствуйте. Если на компьютере установлен стандартный MS Word, то программа работает с...

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

23
Avazart
Эксперт С++
7922 / 5742 / 570
Регистрация: 10.12.2010
Сообщений: 26,305
Записей в блоге: 17
10.06.2012, 14:35 2
Так проверяй диск на котором запущена программа -флеш/не флеш?
0
Ddv122
Почемучка)
1241 / 301 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
10.06.2012, 17:23  [ТС] 3
C++
1
if (!DirectoryExists(ExtractFilePath(Application->ExeName)))
я вот так и проверял если нет директории просто закрывается без сохранения, а если папка скрытая и т.д или программа запущена с флэшки, и флэшка переставлена (достали и вставили обратно) в пк, не сохраняется и получаем кучу ошибок
0
Avazart
Эксперт С++
7922 / 5742 / 570
Регистрация: 10.12.2010
Сообщений: 26,305
Записей в блоге: 17
10.06.2012, 17:29 4
ExtractFileDrive() и проверяй является диск флешкой с помощью WinApi
0
10.06.2012, 17:29
LK
Заблокирован
10.06.2012, 17:31 5
1. "log.txt" и "LOG.txt" - так задумано ?
2. Если просто сохранять лог в каталог программы - независимо от того, с какого носителя программа запущена - на флешку не сохраняет ?
0
Ddv122
Почемучка)
1241 / 301 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
10.06.2012, 17:40  [ТС] 6
Цитата Сообщение от LK Посмотреть сообщение
1. "log.txt" и "LOG.txt" - так задумано ?
не опечатка)

Цитата Сообщение от LK Посмотреть сообщение
2. Если просто сохранять лог в каталог программы - независимо от того, с какого носителя программа запущена - на флешку не сохраняет ?
Программа запущена с флэшки
Сохраняет.
Но если флэшку достали - Программа просто не закрывается)
Если флэшку достали и вставили обратно ошибка не могу сохранить файл
0
Миниатюры
Portable версия программы  
Ddv122
Почемучка)
1241 / 301 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
10.06.2012, 18:14  [ТС] 7
Полный код выхода
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
LK
Заблокирован
10.06.2012, 18:20 8
Ловите отсоединение флешки и закрывайте принудительно программу - по-моему, в ваших тема про пен-драйв многое подобное обсуждалось.

Добавлено через 3 минуты
Ну и есть два пути .
1. Как сделать portable / портабл программу?
2. Portable — вот она радость!
0
Ddv122
Почемучка)
1241 / 301 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
10.06.2012, 18:23  [ТС] 9
LK, понимаете такая ситуация программа запускается с флешек для работы на 20 пк, всем лень скопировать программу на пк , распространяется через одну и туже флэшку на все пк ...
А вот закрыть программу уже не получается...и ко мне идут все претензии)
Как на пример можно поверить если программа запущена НЕ С HDD то просто закрываем.но мы получаем в Edit2 только последний диск по счёту HDD
0
LK
Заблокирован
10.06.2012, 18:29 10
Какая разница - на одном или на 20и в плане "закрыть программу уже не получается" ? Если выдернуть флешку, то прогу не закрыть ? Или не закрыть скопированную на ж/д программу? Ищите, что ее держит привязаной к флешке.
0
Ddv122
Почемучка)
1241 / 301 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
10.06.2012, 18:32  [ТС] 11
Цитата Сообщение от 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
LK
Заблокирован
10.06.2012, 18:48 12
Взял две проги, состоящие из одного ЕХЕ - ColorPic.exe, Convert.exe , скопировал на флешку, запустил, нагло выдернул флешку, закрыл обе программы, для Convert.exe получил сообщение "Диск не найден", видимо, хотело что-то-куда-то записать. И все. Никаких проблем. Ищите, что держит вашу прогу на флешке - может, она упорно что-то пытается писать?
Это, случайно, не ваше :
Диски в системе?

Добавлено через 7 минут
а пропишите-ка код не FormClose, а в FormCloseQuery
0
Ddv122
Почемучка)
1241 / 301 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
10.06.2012, 19:06  [ТС] 13
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
LK
Заблокирован
10.06.2012, 19:17 14
шо - ЛК ?
и зачем лепить код в оба события (кнопка не в счет) ?
0
Ddv122
Почемучка)
1241 / 301 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
10.06.2012, 19:34  [ТС] 15
LK, удалил лишний код
Теперь когда нет флэшки в системе программа сворачивается а не закрывается...закрыть её не возможно
0
LK
Заблокирован
10.06.2012, 19:41 16
EdarGp, дык, уже прогресс .
Знать бы еще, какой код и в каком событии остался.

Добавлено через 1 минуту
Теперь делаем через жопу одно место - перехватываем событие сворачивания (OnMinimize) и пробуем грохнуть программу.
0
Ddv122
Почемучка)
1241 / 301 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
10.06.2012, 20:12  [ТС] 17
LK, Вот переписал проект может посмотрите
если с Hdd - Всё ок
Если с флэшки - всё ок
Если запустил с флэшки и флэшку достал - 0 реакции на закрытие
Если запустил с флэшки и флэшку достал и обратно вставил и пробуешь закрыть ошибка не могу создать файл
0
Вложения
Тип файла: rar exit.rar (39.8 Кб, 9 просмотров)
mimicria
return (true);
1963 / 1100 / 219
Регистрация: 19.04.2011
Сообщений: 2,345
10.06.2012, 21:51 18
if (!DirectoryExists(ExtractFilePath(Application->ExeName))) {
return;
}
else {
Memo1->Lines->SaveToFile("Log.txt"); // сохраняем в файл Log.txt
А зачем проверяется каталог приложения, если потом сохранение идёт непоймикуда?
if (!DirectoryExists(ExtractFilePath(Application->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
Почемучка)
1241 / 301 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
10.06.2012, 21:53  [ТС] 19
mimicria, а что проверять?ExtractFileDrive?

Добавлено через 1 минуту
mimicria, 100% сворачивалась...
0
mimicria
return (true);
1963 / 1100 / 219
Регистрация: 19.04.2011
Сообщений: 2,345
10.06.2012, 22:12 20
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
10.06.2012, 22:12
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2012, 22:12

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru