【问题标题】:Converting .bat to .exe with no additional external software (Create SFX)无需其他外部软件即可将 .bat 转换为 .exe(创建 SFX)
【发布时间】:2018-06-29 09:19:25
【问题描述】:

遵循与guide 相同的步骤。我正在尝试在不安装任何新软件(例如Bat to Exe Converter)的情况下从 bat 转换为 exe。我使用这种方法的原因是因为我工作场所中的所有机器都已经安装了 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 文件的内容被解压到 temp 目录。
  2. 读取脚本生成的配置文件。
  3. EXE 文件中包含的批处理文件以新的方式执行 命令窗口。
  4. 完成后,临时文件将被删除。

【问题讨论】:

  • 问题是什么?也许你会想检查一下 - stackoverflow.com/questions/28174386/…
  • @npocmaka 问题是为什么蝙蝠没有执行?为什么缺少第 3 步?我试图更改 bat 文件,因为 pause 可能无法正常工作并且我看不到输出。所以我在我的 bat 文件中添加了mkdir not_a_real_dir,即使这样,也没有添加新文件夹。 bat 文件根本没有执行,也许有人知道原因。
  • 您的问题不符合您的要求!这个想法似乎使用了外部软件,一个 7zip 自解压模块。
  • @npocmaka 我查看了您的链接,似乎还有另一种方法可以在没有 7zip 的情况下执行此操作,谢谢您的帮助。以前我正在参考此页面How can I convert a Windows batch script to a .exe? 工作,该页面没有在您的链接中列出解决方案。

标签: windows batch-file 7zip


【解决方案1】:

参考这个How can a .bat file be 'converted' to .exe without third party tools?

原始脚本接受两个参数 - 您要转换的 .bat 文件和目标可执行文件。

我做了一些修改以接受一个参数:只是您要转换的 .bat 文件。

因此,在这种情况下,您可以将批处理文件拖放到此脚本上bat2exeIEXP.bat,它将被转换为与批处理文件。

;@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=

【讨论】:

  • 如何为这个输出 setup.exe 设置自定义图标?
  • @Philip:快捷方式中的图标可以从“文件属性”对话框中更改。目标可执行文件(.exe 文件)中的图标可以通过 Resource Hacker 或 GConvert 等二进制文件编辑器进行更改。其他一些列在:listoffreeware.com/free-software-change-program-icon
  • 那么如何处理bat脚本中的相对路径呢?
  • 如何让应用程序在后台静默启动?因为它仍然显示黑色的 cmd 框
  • @IonicMan 更改 ShowInstallProgramWindow=1
【解决方案2】:

所有安装了 .NET 的 Windows 机器都带有名为 vbc.exe、csc.exe 和 jsc.exe 的文件,位于 %windir%\Microsoft.NET\Framework(用于 32 位)或 Framework64(用于 64 位),位于以“v”开头的文件夹名称。

C#编译器指南:
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/command-line-building-with-csc-exe

Visual Basic 编译器指南:
https://docs.microsoft.com/en-us/dotnet/visual-basic/reference/command-line-compiler/index
示例命令:
https://docs.microsoft.com/en-us/dotnet/visual-basic/reference/command-line-compiler/sample-compilation-command-lines

Jscripting 指南:
http://www.phpied.com/make-your-javascript-a-windows-exe/

从 @Itchy 开始使用 csc.exe 将批处理文件捆绑到 exe 文件的简单演练:
How can a .bat file be 'converted' to .exe without third party tools?

在同一文件夹中,还可能找到一个名为 ngen.exe 的文件,该文件“生成本机代码,因此应用程序无需在运行时执行即时编译过程”。
见:
https://books.google.com.au/books?id=iZM1jyqiyakC&pg=PA453&lpg=PA453&dq=guide++vbc.exe&source=bl&ots=UB041mSfni&sig=ACfU3U0xtmS8X9p0eDKD-u6bt-WvOVCbmQ&hl=en&sa=X&ved=2ahUKEwjshc6589_lAhXXXSsKHcTaBlUQ6AEwD3oECAYQAQ#v=onepage&q=guide%20%20vbc.exe&f=false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多