Что нового

Выполняются закомментированые строчки и прочие глюки, которые не могу объяснить

Юрий

Новичок
Сообщения
82
Репутация
3
Доброго времени суток, форумчане. Программа предназначена для сокрытия архива в (по идее) картинке (но наверное в любом файле можно) путём создания и запуска .bat.

Код батника:
Код:
copy / b (имя файла в который прятать) + (имя архива, который прячем) (название конечного файла)

все имена файлов без пробелов, использую латиницу и цифры(и только), названиеконечного файла дублирую с именем файла в который прячу

Код скрипта:
Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=icon.ico
#EndRegion

#Region			<<< Библиотеки и Опции >>>
#RequireAdmin
#EndRegion

#Region			<<< Переменные >>>
;~ $Files - выбераем что скрывать
;~ 	$Split
;~ $FileToHideIn - выбераем во что засунуть
Local $Files = FileOpenDialog( "Выберите файлы для сокрытия..." , @ScriptDir , "Все (*.*)" , 7 )
;~ 	раскидываем имена файлов из одной строчки в массив
	Local $Split = StringSplit( $Files , "|" )
local $FileToHideIn = FileOpenDialog( "Выберите файл в который прятать..." , @ScriptDir , "Все (*.*)" )
	For $i = 1 To StringLen($FileToHideIn)
		;отделяем только имя файла, без пути
		If StringLeft( StringRight($FileToHideIn,$i) , 1 ) = "\" Then
			$FileToHideIn = StringRight($FileToHideIn,$i-1)
			ExitLoop
		EndIf
	Next
#EndRegion

#Region			<<< Функции >>>
_MakingArchive()
_CreateAndRunBat()

Func _MakingArchive() ; по названию понятно
;~ всё, что мы делаем с файлами происходит во временной папке пользователя
;~ создаём файл лист для rar.exe что бы он знал что засунуть в архив
	Local $FileList = FileOpen( @TempDir & "\FilesToHide.lst" , 10 )
	For $i = 2 To $Split[0]
		FileWrite( $FileList , $Split[$i] & @CRLF )
;~ 		а заодно и файлы в @TempDir перебрасываем
		FileCopy( $Split[1] & "\" & $Split[$i] , @TempDir , 9 )
	Next
	FileClose($FileList)

;~ 	пишем бинарный код rar.exe в новый пустой файл
	_RarExeWrite( @TempDir & "\rar.exe" )
	RunWait( "rar a HidenArch @FilesToHide.lst" , @TempDir , 0 )

;~ 	удаляем всё то, что понасоздавали, кроме архива естественно)
	For $i = 2 To $Split[0]								;<<<---!!!--->>>
		FileDelete( @TempDir & "\" & $Split[$i] )		;<<<---!!!--->>>
	Next												;<<<---!!!--->>>

	FileDelete(@TempDir & "\rar.exe")
	FileDelete(@TempDir & "\FilesToHide.lst")
EndFunc
;=============================================================================================================================
;=============================================================================================================================
Func _CreateAndRunBat() ; тоже понятно по названию
	Local $BatFile = FileOpen( @TempDir & "\Hider.bat" , 10 )
	FileWriteLine($BatFile, 'copy / b ' & $FileToHideIn & ' + HidenArch.rar SECRET' & $FileToHideIn)
	FileClose($BatFile)
	ShellExecuteWait(@TempDir & "\Hider.bat", @TempDir, @SW_HIDE)
;~ 	удаляем лишнее
	FileDelete( @TempDir & "\Hider.bat" )				;<<<---!!!--->>>
	FileDelete( @TempDir & "\HidenArch.rar" )			;<<<---!!!--->>>
	FileDelete( @TempDir & "\" & $FileToHideIn )		;<<<---!!!--->>>
;~ 	перемещяем конечный файл
	FileMove( @TempDir & "\SECRET" & $FileToHideIn  , @ScriptDir , 1 )
	Beep( 1000 , 100 )
	Exit
EndFunc
;=============================================================================================================================
;=============================================================================================================================
Func _RarExeWrite ($File) ; создаёт rar.exe (часть winrar)
;длинный бинарный код на 10k строчек
;и одна - которая собственно файл создаёт
;описывать это незачем - там проблем нет
EndFunc

Суть проблемы:
если закоментировать строчки, которые я обзначил маркерами, то каким-то чудом конечный файл всё таки перемещается в @ScriptDir а все те файлы, которые должны удалиться - удаляются, кроме батника, так как он, наверное, исполняется.
Прав вроде как должно хватать. Пробовал как из 7 так и из ХР.
Уже голова пухнет ни как не пойму что за беда-то такая. Где же я сглупил?



Добавлено:
Сообщение автоматически объединено:

Юрий [?]
Код:
RunWait( "rar a HidenArch @FilesToHide.lst" , @TempDir , 0 )


нашёл, кое-что - вот тут я дурь написал. ещё бы найти как в cmd комманду выполнить...
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Юрий сказал(а):
как в cmd комманду выполнить...
Код:
Run(@windowsdir&"\system32\cmd.exe /k copy /b <Путь> <Путь>")

Ключ /k по идее должен оставлять запущенную консоль открытой когда без него скорее всего закроется после выполнения команды
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Юрий [?]
ещё бы найти как в cmd комманду выполнить.
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Глобальный модератор.



Код:
Run(@ComSpec & ' /k help | more')
 
Верх