Что нового

[Автоматизация] Исполнение CMD скрипта используя программы скомпилированные в конечный EXE

Tosyk

Новичок
Сообщения
204
Репутация
0
Есть две программы и CMD скрипт, который ищет файлы *.sds вглубь по каталогам и обрабатывает каждый двумя программами:
Код:
@Echo Off
For /F "Tokens=*" %%A In ('Dir /B /S *.sds') Do (
	MD "%%~dpnA" 2>nul&&Mafia2ModelDumper.exe "%%A"
	For %%B In (*.dae) Do mesh2rdm.exe "%%B" "%%~dpnA\%%B" -flipuv -scale 100 -nopause -rotate 0 180 0
	Del /F /Q *.dae 2>nul
@rem SDSTool.exe e -o ""%%~dpnA"" "%%A"
	)
Нужно, чтобы всё эти программы были включены в конечный скомпилированный EXE и операции проходили бы незаметно для пользователя. Из того, что я пока узнал на autoit-script.ru у меня получился скрипт:
Код:
#Region
#AutoIt3Wrapper_icon=application-x-executable.ico
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_File_Add=mesh2rdm.exe, rt_rcdata, MESH_2_RDM_EXE
#AutoIt3Wrapper_Res_File_Add=Gibbed.Helpers.dll, rt_rcdata, GIBBED_DLL_1
#AutoIt3Wrapper_Res_File_Add=Gibbed.Illusion.FileFormats.dll, rt_rcdata, GIBBED_DLL_2
#AutoIt3Wrapper_Res_File_Add=ICSharpCode.SharpZipLib.dll, rt_rcdata, GIBBED_DLL_3
#AutoIt3Wrapper_Res_File_Add=Mafia2ModelDumper.exe, rt_rcdata, MAFIA_2_MODEL_DUMPER_EXE
#AutoIt3Wrapper_Res_File_Add=Mafia2ModelDumper.exe.config, rt_rcdata, M2D_CONFIG
#AutoIt3Wrapper_Res_File_Add=Mafia2Tool.dll, rt_rcdata, M2D_DLL
#AutoIt3Wrapper_Res_File_Add=m2-obj-conv.cmd, rt_rcdata, MAIN_CMD
#EndRegion

;#include <Mafia2ModelDumper.exe>
;#include <mesh2rdm.exe>

If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)

FileChangeDir('.\')
Run("m2-obj-conv.cmd", "", @SW_HIDE)

#include <GUIConstantsEx.au3>

#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Progress", 265, 107, 298, 181)
$Progress1 = GUICtrlCreateProgress(8, 16, 249, 22)
$Button1 = GUICtrlCreateButton("Запуск", 8, 64, 249, 40
)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            GUICtrlSetState($Button1, $GUI_DISABLE)
            GUICtrlSetData($Progress1, 0)
            For $i = 1 To 100
                GUICtrlSetData($Progress1, $i)
                Sleep(20)
            Next
            ToolTip('Ждем 2 секунды...', 0, 0)
            Sleep(2000)
            ToolTip('')
            GUICtrlSetData($Progress1, 0)
            GUICtrlSetState($Button1, $GUI_ENABLE)
    EndSwitch
WEnd

Exit

Скрипт имеет диалоговое окно и умеет исполнять CMD если только все необходимые программы и CMD лежат с ним в одной папке, а те которые включены в него он игнорирует.

Вопрос: как использовать ресурсы включённые в конечный EXE, возможно с распаковкой в папку TEMP.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Tosyk,
FileInstall().
И я бы сначала нашел все файлы *.sds и, или в зависимости от их количества, или их размера считал данные для отображения прогресса. Консольные утилиты можно и, ИМХО, нужно запускать не из CMD скрипта, а из Вашей программы, и читать их консольный вывод.
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
204
Репутация
0
madmasles сказал(а):
Получился вот такой скрипт:
Код:
#Region
#AutoIt3Wrapper_icon=application-x-executable.ico
#AutoIt3Wrapper_Compression=4
;#AutoIt3Wrapper_Res_File_Add=mesh2rdm.exe, rt_rcdata, MESH_2_RDM_EXE
;#AutoIt3Wrapper_Res_File_Add=Gibbed.Helpers.dll, rt_rcdata, GIBBED_DLL_1
;#AutoIt3Wrapper_Res_File_Add=Gibbed.Illusion.FileFormats.dll, rt_rcdata, GIBBED_DLL_2
;#AutoIt3Wrapper_Res_File_Add=ICSharpCode.SharpZipLib.dll, rt_rcdata, GIBBED_DLL_3
;#AutoIt3Wrapper_Res_File_Add=Mafia2ModelDumper.exe, rt_rcdata, MAFIA_2_MODEL_DUMPER_EXE
;#AutoIt3Wrapper_Res_File_Add=Mafia2ModelDumper.exe.config, rt_rcdata, M2D_CONFIG
;#AutoIt3Wrapper_Res_File_Add=Mafia2Tool.dll, rt_rcdata, M2D_DLL
;#AutoIt3Wrapper_Res_File_Add=m2-obj-conv.cmd, rt_rcdata, MAIN_CMD
#EndRegion

;#include <Mafia2ModelDumper.exe>
;#include <mesh2rdm.exe>

If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)

FileChangeDir('.\')
Run("m2-obj-conv.cmd", "", @SW_HIDE)

#include <GUIConstantsEx.au3>

#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Progress", 265, 107, 298, 181)
$Progress1 = GUICtrlCreateProgress(8, 16, 249, 22)
$Button1 = GUICtrlCreateButton("Запуск", 8, 64, 249, 40)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            GUICtrlSetState($Button1, $GUI_DISABLE)
            GUICtrlSetData($Progress1, 0)
            For $i = 1 To 100
                GUICtrlSetData($Progress1, $i)
                Sleep(20)
            Next
            ToolTip('Ждем 2 секунды...', 0, 0)
            Sleep(2000)
            ToolTip('')
            GUICtrlSetData($Progress1, 0)
            GUICtrlSetState($Button1, $GUI_ENABLE)
    EndSwitch
WEnd

Func _Start()
	Local $sMAIN_CMD = @AppDataDir & '\m2-obj-conv.cmd'

	If Not FileInstall('m2-obj-conv.cmd', $sMAIN_CMD, 1) Then Return SetError(1)
	If Not FileInstall('Mafia2ModelDumper.exe', @AppDataDir & '\Mafia2ModelDumper.exe', 1) Then Return SetError(1)
	If Not FileInstall('Mafia2Tool.dll', @AppDataDir & '\Mafia2Tool.dll', 1) Then Return SetError(1)
	If Not FileInstall('Gibbed.Helpers.dll', @AppDataDir & '\Gibbed.Helpers.dll', 1) Then Return SetError(1)
	If Not FileInstall('Gibbed.Illusion.FileFormats.dll', @AppDataDir & '\Gibbed.Illusion.FileFormats.dll', 1) Then Return SetError(1)
	If Not FileInstall('ICSharpCode.SharpZipLib.dll', @AppDataDir & '\ICSharpCode.SharpZipLib.dll', 1) Then Return SetError(1)
;	If Not FileInstall('ICSharpCode.SharpZipLib.dll', @AppDataDir & '\ICSharpCode.SharpZipLib.dll', 1) Then Return SetError(1)
	Return SetError(0)
EndFunc   ;==>_Start

Exit


но он не работает, не включает файлы в себя
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Tosyk [?]
но он не работает
Конечно не работает. Вы функцию _Start() самом начале скрипта забыли выполнить. И обращаться к ним (файлам) надо по новому пути. А CMD скрипт, похоже, будет искать файлы только в подпапках собственной папки.
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
204
Репутация
0
madmasles сказал(а):
Tosyk [?]
но он не работает
Конечно не работает. Вы функцию _Start() самом начале скрипта забыли выполнить. И обращаться к ним (файлам) надо по новому пути. А CMD скрипт, похоже, будет искать файлы только в подпапках собственной папки.
Эх, мне кажется легче будет написать фунции CMD силами AutoIT, вся проблема в том, что я незнаю как интерпретировать комманды cmd в autoit, может быть переназвать тему и изменить подход к вопросу, чтобы всю задачу написать на autoit?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Tosyk [?]
я незнаю как интерпретировать комманды cmd в autoit, может быть переназвать тему и изменить подход к вопросу, чтобы всю задачу написать на autoit
ИМХО, Вам надо подробно расписать задачу и обратиться в Стол заказов.

PS
В принципе, пример общения AutoIt с консольным umodel.exe у Вас есть.
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
204
Репутация
0
madmasles сказал(а):
Tosyk [?]
я незнаю как интерпретировать комманды cmd в autoit, может быть переназвать тему и изменить подход к вопросу, чтобы всю задачу написать на autoit
ИМХО, Вам надо подробно расписать задачу и обратиться в Стол заказов.
я думал об это сначала, но я хочу научится делать это, надеюсь получится сделать это на примере. Сделал тему

madmasles сказал(а):
В принципе, пример общения AutoIt с консольным umodel.exe у Вас есть.
Для меня очень сложно понять последовательность действий, скрипт выглядит очень грамоздким, сравнивая его с моими двух-строчными CMD :blink:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Tosyk [?]
скрипт выглядит очень грамоздким, сравнивая его с моими двух-строчными CMD
Так Вы же хотите окно с отображением процесса и прогресса. :smile:
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
204
Репутация
0
madmasles сказал(а):
Tosyk [?]
скрипт выглядит очень грамоздким, сравнивая его с моими двух-строчными CMD
Так Вы же хотите окно с отображением процесса и прогресса. :smile:
да, всё верно, я думаю вам это под силу, но для меня проблема, я столкнулся с autoit давольно недавно, он меня очень привлёк, думаю он именно то, что нужно для небольших программ :smile:
 
Верх