PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » удалить родительскую директорию (вместе с файлом).


удалить родительскую директорию (вместе с файлом).

Сообщений 1 страница 6 из 6

1

Что-то у меня не получается ((
вообщем, есть директория. находится она в стандартной "C:\Program Files (x86)\PSE" , где "PSE" это уже моя директория
в ней лежит единственный файл с именем, пусть 004.exe
как, запустив этот файл добиться ликвидации и его самого и его родительской директории PSE. В идеале, было бы здорово  еще на прощанье выполгнить что-то типа MessageRequester("","Пока!") ?
Максимум, что я добился, это удаления самого файла

Код:
ShellExecute_(0, "RunAS", GetEnvironmentVariable("comspec"), "/c del "+Chr(34)+ProgramFilename()+Chr(34), "", #SW_SHOWNORMAL)

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

Отредактировано Goga (11.09.2021 13:12:37)

0

2

А от админа удаляется?
И почему бы не DeleteDirectory?

Отредактировано AZJIO (11.09.2021 13:37:25)

0

3

админом тоже не удаляется. Попробовал DeleteDirectory не может удалить ни сам файл, ни саму директорию.

0

4

вот теперь понял, удалить файл работающей программы. Надо сделать перебор процессов запрашивая путь исполняемого файла, убить процесс, а потом удалить файл.

Пример на AutoIt3, думаю надо на оффоруме погуглить GetModuleFileNameEx

Код:
; Возвращает путь к EXE-файлу запущенного процесса зная его PID
Func _ProcessGetPath($PID)
	Local $hKernel32_dll, $hProcess, $Path, $ret
	If IsString($PID) Then $PID = ProcessExists($PID)
	$Path = DllStructCreate('char[1000]')
	$hKernel32_dll = DllOpen('Kernel32.dll')
	; $PROCESS_QUERY_INFORMATION + $PROCESS_VM_READ
	$hProcess = DllCall($hKernel32_dll, 'int', 'OpenProcess', 'dword', 0x400 + 0x10, 'int', 0, 'dword', $PID)
	$ret = DllCall('Psapi.dll', 'long', 'GetModuleFileNameEx', 'long', $hProcess[0], 'int', 0, 'ptr', DllStructGetPtr($Path), 'long', DllStructGetSize($Path))
	$ret = DllCall($hKernel32_dll, 'int', 'CloseHandle', 'hwnd', $hProcess[0])
	DllClose($hKernel32_dll)
	Return DllStructGetData($Path, 1)
EndFunc

И ещё вариант - удалить в корзину. То есть процесс позволяет переименовать файл или переместить его, а после перезагрузки уже не сможет его найти, но в текущей сессии он всё ещё будет исполнятся.

Я в Linux, поэтому даже при желании пока нет возможности быстро переделать.

Отредактировано AZJIO (11.09.2021 15:39:06)

0

5

про удаление папки есть в справке, там расписаны варианты удаления папки с файлами
не всё так просто с удалением папки

0

6

newJS написал(а):

про удаление папки есть в справке, там расписаны варианты удаления папки с файлами
не всё так просто с удалением папки

придумал я, казалось бы, надежный путь. Запускаю программу, записываю в темп директории exe-шник, запускаю его, а родительскую программу закрываю. Этот exe-шник удаляет директорию , потом удаляет сам себя  c помощью встроенного cmd.exe
И это все прекрасно работает... с отключенным защитником виндов. Если этот защитник оставить, то он уже на этапе записи файл.exe в темп директорию душит все и вся.

Отредактировано Goga (Сегодня 05:00:42)

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » удалить родительскую директорию (вместе с файлом).