Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
daxter
Сообщений: n/a
#1

Как удалить файл программы с винчестера самой программой? - C++

19.06.2008, 02:33. Просмотров 1021. Ответов 8
Метки нет (Все метки)

Мне нужно сделать это под Виндоус.
Удалить файл программы когда она же и запущена.
Система блокирует доступ к файлу на удаление.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2008, 02:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как удалить файл программы с винчестера самой программой? (C++):

Как удалить файл программой - C++
Если можно приведите пример программы.

Как полностью перезапустить программу из самой же программы? Не сбросить все параметры - C++
Имеется достаточно длинная программа. Вся программа содержится в main() с использованием case. Нужно полностью ребутнуть всю программу,...

Возможно ли как-то сокрыть реализации стратегий в самой библиотеке, то есть вынести в cpp-файл? - C++
Здравствуйте! Разрабатываю движок, как подключаемую библиотеку, на основе стратегий. Имеется вот такой заголовочный файл,...

Файл: Как сделать так, чтобы при запуске программы проверялось, существует ли файл? - C++
Как сделать так, чтобы при запуске программы проверялось, существует ли файл. Если да, то он обнуляется, если нет, то создается?

Сворачивание программы самой себя в трей - C++
Добрый вечер! Что нужно прописать в начало программы, чтобы после запуска она сворачивала саму себя в трей? Программа консольная. ...

Работа с БД. Файл с самой БД - C++
Всем здравствуйте! Есть прога для работы с БД, делал не я, пытаюсь в ней разобраться. Встал вопрос- прога требует файл, в котором...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Dmitry_Gr
0 / 0 / 0
Регистрация: 07.06.2008
Сообщений: 14
19.06.2008, 02:46 #2
Такой вопрос где-то я уже видел на форумах.
Там по-моему предлагали создать *.bat файл для удаления и при выходе из программы запустить его.
daxter
Сообщений: n/a
19.06.2008, 03:16 #3
А кто удалит батничек потом?
sn
Сообщений: n/a
19.06.2008, 06:40 #4
Do
Создать другой батничек...
Until

А если серьезно, то я видел в книге 'Неофицальная Windows 95' 1996 года редакции. Там что-то говорилось про отложенное изменение файла.
Задаешь винде отложенное удаление. Как только файл становится доступным - херишь его.
simplepilot
1 / 1 / 0
Регистрация: 22.07.2007
Сообщений: 366
19.06.2008, 12:56 #5
Я уж не знаю точно как это делается на С++ но уверен что делается. А что нельзя запустить другой Thread, сделать ему цикл где то минуты на полторы а потом он удалит основную программу.
daxter
Сообщений: n/a
21.06.2008, 02:59 #6
Но ведь поток не может существовать без родительского процесса.
Так что это тоже не выход.
daxter
Сообщений: n/a
27.06.2008, 01:42 #7
Спасибо ВСЕМ!
Вариант с батничками действительно прошел!
violator
Сообщений: n/a
01.07.2008, 11:23 #8
Поищи в сети исходник WinCih
Они хорошо закоментированы. Идея значит такая... Переходишь на нулквое кольцо защиты (генерированием ексепшена) и потом что хочешь можешь удалять (Ты как ядро)
daxter
Сообщений: n/a
02.07.2008, 01:33 #9
Ну с нулевым кольцом это уже перебор, я обошелся более простым вариантом с bat - файлом:
<code>
int main()
{
char progfile [MAX_PATH];
char batfile [MAX_PATH];
char *batcmd=new char[60+3*MAX_PATH];
DWORD num;
HANDLE hBat;

GetWindowsDirectory(batfile,MAX_PATH);
strcat(batfile,'\temp\del.bat');
GetModuleFileName(NULL,progfile,MAX_PATH);
wsprintf(batcmd,'@echo off

:l1

del '%s '

if exist '%s ' goto l1

del '%s '
',progfile,progfile,batfile);

hBat=CreateFile((LPCSTR)batfile,GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(hBat,batcmd,strlen(batcmd),&num, NULL);
CloseHandle(hBat);

STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW;

CreateProcess(NULL,batfile,NULL,NULL,FALSE, IDLE_PRIORITY_CLASS|DETACHED_PROCESS,
NULL,NULL,&si,&pi);
delete [] batcmd;
return 0;
}
</code>
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2008, 01:33
Привет! Вот еще темы с ответами:

прокомментируйте каждую строчку программы, у самой не получается (максимальный массив) - C++
#include &lt;iostream&gt; using namespace std; void main() { int A,i,j,max; for(i=0;i&lt;3;i++) for(j=0;j&lt;3;j++)...

Как удалить файл? - C++
Создал файл text.txt и хочу удалить его програмно... Но функция remove() не работает. Может кто знает в чем дело... Вот код:#include...

Как удалить файл? - C++
есть программа которая создает список персонала, проблема заключается в том что созданные файлы не удаляются через программу. я использовал...

Нужно нарисовать 2 блок-схемы(1 математическую,2 для написания самой программы) - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; //длина стороны АВ double side(double xa, double ya, double xb,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.07.2008, 01:33
Ответ Создать тему
Опции темы

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