Преобразование .bat в .exe без дополнительного внешнего программного обеспечения (Create SFX) - PullRequest
0 голосов
/ 29 июня 2018

Выполните те же действия, что и гид . Я пытаюсь конвертировать из bat в exe без установки какого-либо нового программного обеспечения, таких как Bat to Exe Converter . Причина, по которой я использую этот метод, заключается в том, что на всех машинах на моем рабочем месте уже установлена ​​программа 7zip, и я могу ее использовать, однако мне не разрешается запускать сценарий с использованием внешнего программного обеспечения, отсутствующего на главном сервере, для совместимости на любом компьютере в компания.

У меня есть следующее TEST.bat :

ECHO This is a Test bat to exe
pause

и config.txt :

;!@Install@!UTF-8! 
RunProgram="TEST.bat" 
;!@InstallEnd@! 

тогда я вызываю следующую командную строку (в другом .bat):

COPY /B "%PathTo7Zip%\7zCon.sfx" + %Config% + %Source7ZFile% %OutputFile%

%PathTo7Zip% - это каталог 7zCon.sfx %Config% - это config.txt файл выше %Source7ZFile% мой архив .7z и %OutputFile% - это мой выходной файл TEST.exe , который должен запускать файл bat, когда я вызываю его, согласно автору руководства. Однако при вызове TEST.exe происходит разархивирование архива .7z (что ожидается), а затем он завершается без запуска TEST.bat .

Однако автор объясняет:

Вывод:

Важно отметить, что, хотя результирующий файл работает точно так же, как и исходный BAT-файл, это не настоящий пакетный преобразователь в исполняемый файл. Полученный файл представляет собой EXE-файл, однако он предназначен для использования самораспаковывающимися установщиками. Когда вы выполняете полученный EXE-файл, процесс выглядит примерно так:

  1. Содержимое EXE-файла извлекается во временный каталог.
  2. Файл конфигурации, сгенерированный скриптом, читается.
  3. Пакетный файл, содержащийся в файле EXE, выполняется в новом командное окно.
  4. По завершении временные файлы удаляются.

1 Ответ

0 голосов
/ 29 июня 2018

См. Это Как можно "конвертировать" файл .bat в .exe без сторонних инструментов?

Исходный сценарий принимает два аргумента - файл .bat, который вы хотите преобразовать, и целевой исполняемый файл.

Я сделал небольшую модификацию, чтобы принять один аргумент: просто файл .bat, который вы хотите преобразовать.

Таким образом, в этом случае вы можете перетащить пакетный файл поверх этого сценария bat2exeIEXP.bat , и он будет преобразован в исполняемый файл с тем же именем, что и пакетный файл. .

enter image description here

;@echo off
;Title Converting batch scripts to file.exe with iexpress
;Mode 75,3 & color 0A
;Rem Original Script https://github.com/npocmaka/batch.scripts/edit/master/hybrids/iexpress/bat2exeIEXP.bat
;echo(
;if "%~1" equ "" (
    ;echo  Usage : Drag and Drop your batch file over this script:"%~nx0"  
    ;Timeout /T 5 /nobreak>nul & Exit
;)
;set "target.exe=%__cd__%%~n1.exe"
;set "batch_file=%~f1"
;set "bat_name=%~nx1"
;set "bat_dir=%~dp1"
;Set "sed=%temp%\2exe.sed"
;echo              Please  wait a while ...  Creating "%~n1.exe" ...
;copy /y "%~f0" "%sed%" >nul
;(
    ;(echo()
    ;(echo(AppLaunched=cmd /c "%bat_name%")
    ;(echo(TargetName=%target.exe%)
    ;(echo(FILE0="%bat_name%")
    ;(echo([SourceFiles])
    ;(echo(SourceFiles0=%bat_dir%)
    ;(echo([SourceFiles0])
    ;(echo(%%FILE0%%=)
;)>>"%sed%"

;iexpress /n /q /m %sed%
;del /q /f "%sed%"
;exit /b 0

[Version]
Class=IEXPRESS
SEDVersion=3
[Options]
PackagePurpose=InstallApp
ShowInstallProgramWindow=0
HideExtractAnimation=1
UseLongFileName=1
InsideCompressed=0
CAB_FixedSize=0
CAB_ResvCodeSigning=0
RebootMode=N
InstallPrompt=%InstallPrompt%
DisplayLicense=%DisplayLicense%
FinishMessage=%FinishMessage%
TargetName=%TargetName%
FriendlyName=%FriendlyName%
AppLaunched=%AppLaunched%
PostInstallCmd=%PostInstallCmd%
AdminQuietInstCmd=%AdminQuietInstCmd%
UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles

[Strings]
InstallPrompt=
DisplayLicense=
FinishMessage=
FriendlyName=-
PostInstallCmd=<None>
AdminQuietInstCmd=
...