Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 04.09.2017, 02:58   #11
madpitbull
Новичок
Пользователь
 
Регистрация: 03.09.2017
Сообщений: 11
Репутация: 10
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
О святая вера в телепатию великих гуру!
У Вас под рукой проект, отладчик..
А мы должны посмотреть в хрустальный шар и определить место ошибки..

Пройдите этот участок по шагам в отладчике и определите точно место, на котором оно падает. Или выкладывайте проект целиком.

Пока наиболее подозрительна строка
Код:

Action = (TBasicAction*)caFree;

Что это вообще? Откуда?
Да действительно, что то не понятное происходит, выкладываю проект и прошу помощи в его корректной работе.

И Вы верно заметили, ошибку вызывает именно строка Action = (TBasicAction*)caFree;
Вложения
Тип файла: zip proekt.zip (14.3 Кб, 1 просмотров)
madpitbull вне форума   Ответить с цитированием
Старый 04.09.2017, 05:01   #12
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 508
Репутация: 373
По умолчанию

Ну так без этой строчки проект работает? Или всё же нет?
Black Fregat вне форума   Ответить с цитированием
Старый 04.09.2017, 09:09   #13
madpitbull
Новичок
Пользователь
 
Регистрация: 03.09.2017
Сообщений: 11
Репутация: 10
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
Ну так без этой строчки проект работает? Или всё же нет?
Проект работает, но не удаляет после закрытия распакованный exe.
В этом то и суть моей просьбы здесь)

Код:

void __fastcall TForm1::Button2Click(TObject *Sender)
{
char *ResType = "EXEFILE";

TResourceStream* ResPtr = new TResourceStream((int)HInstance, "MYEXE", ResType);
ResPtr->SaveToFile("Kalibr.exe");
ShellExecute(Handle,"open","Kalibr.exe",NULL,NULL,SW_SHOWNORMAL);  //Çàïóñêàåì êàëèáðîâêó
delete ResPtr;
Sleep(2000);
if (FileExists("Kalibr.exe"))
 try {
  DeleteFile ("Kalibr.exe");
 } catch (...) {}
}

Точнее распакованный exe-шник удаляется если успеть закрыть его окно в течении времени, указанного в функции Slepp,если продержать окно открытым больше, в этом примере 2 секунд, то соответственно он остается не удаленным.
madpitbull вне форума   Ответить с цитированием
Старый 04.09.2017, 09:14   #14
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 14,694
Репутация: 2887

icq: 512-7шесть5
skype: alexp.frl
По умолчанию

Я ж говорил уже что делать надо
Цитата:
Сообщение от Alex11223 Посмотреть сообщение
не удаляется потому что ShellExecute не ждет завершения программы.
Либо вызывайте удаление где-то потом в другом месте, либо используйте CreateProcess + WaitForSingleObject, примеров полно в гугле.
Alex11223 вне форума   Ответить с цитированием
Старый 04.09.2017, 09:29   #15
madpitbull
Новичок
Пользователь
 
Регистрация: 03.09.2017
Сообщений: 11
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Я ж говорил уже что делать надо
Я видел Ваше сообщение и почитал вчера про CreateProcess + WaitForSingleObject и честно говоря, пока не понял как применить это здесь)

Если Вам не трудно, подскажите пожалуйста правильный код для моей задачи?
madpitbull вне форума   Ответить с цитированием
Старый 04.09.2017, 09:42   #16
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 14,694
Репутация: 2887

icq: 512-7шесть5
skype: alexp.frl
По умолчанию

Что как применить? У вас задача запустить программу и дождаться ее завершения. Любой пример с CreateProcess + WaitForSingleObject делает именно это.
Alex11223 вне форума   Ответить с цитированием
Старый 04.09.2017, 10:43   #17
madpitbull
Новичок
Пользователь
 
Регистрация: 03.09.2017
Сообщений: 11
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Что как применить? У вас задача запустить программу и дождаться ее завершения. Любой пример с CreateProcess + WaitForSingleObject делает именно это.
Так в том то и дело, что с запуском и завершением нет проблем, и даже с удалением распакованного exe после закрытия приложения, что было основной задачей.

Однако удаляется распакованный exe только в промежуток времени, заданное в Sleep. Если окно приложения не закрыть за это время, то он не удаляется.

Я вот и прошу Вас помочь, как сделать, что бы приложение ждало пока не удалится распакованный ранее exe?
madpitbull вне форума   Ответить с цитированием
Старый 04.09.2017, 11:13   #18
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 14,694
Репутация: 2887

icq: 512-7шесть5
skype: alexp.frl
По умолчанию

Цитата:
Сообщение от madpitbull Посмотреть сообщение
Однако удаляется распакованный exe только в промежуток времени
facepalm.png

Я ж 2 раза уже сказал, что не удаляется потому что ShellExecute не ждет завершения программы (и во время выполнения программу нельзя удалить). То есть на строке с ShellExecute ваша программа (основная) не останавливается до завершения той программы, а идет дальше.

Соответственно если немного подумать, то несложно понять, что надо например дождаться ее завершения перед вызовом удаления.

Один из вариантов это сделать: запускать через CreateProcess вместо ShellExecute, он возвращает handle процесса, который можно использовать для ожидания завершения процесса с помощью WaitForSingleObject.
Alex11223 вне форума   Ответить с цитированием
Старый 04.09.2017, 11:47   #19
madpitbull
Новичок
Пользователь
 
Регистрация: 03.09.2017
Сообщений: 11
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Вложение 89367

Я ж 2 раза уже сказал, что не удаляется потому что ShellExecute не ждет завершения программы (и во время выполнения программу нельзя удалить). То есть на строке с ShellExecute ваша программа (основная) не останавливается до завершения той программы, а идет дальше.

Соответственно если немного подумать, то несложно понять, что надо например дождаться ее завершения перед вызовом удаления.

Один из вариантов это сделать: запускать через CreateProcess вместо ShellExecute, он возвращает handle процесса, который можно использовать для ожидания завершения процесса с помощью WaitForSingleObject.
Я действительно многого еще не понимаю и не могу реализовать то, что мне нужно. Поэтому и прошу Вас пример такого-верного кода.

И еще может не верно понимаю но, основная программа не должна закрываться, вся основная работа проходит в ней, а сторонняя вызывается только по необходимости.
madpitbull вне форума   Ответить с цитированием
Старый 04.09.2017, 14:32   #20
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 303
Репутация: 59
По умолчанию

caFree больше похожа на константу, хотя я не разбираюсь в Actionah.
Cuprum5 вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создания ярлыка Volkogriz Общие вопросы Delphi 4 29.08.2014 23:32
Содержимое ярлыка Gr@nd Общие вопросы Delphi 6 13.01.2010 10:06
Стрелка у ярлыка Altera Windows 3 29.10.2008 15:45
C# Создания ярлыка MAcK Общие вопросы .NET 6 16.08.2008 12:22
Свойства ярлыка Fainder Win Api 1 26.04.2007 15:26




15:14.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru