包装为 IExpress 可执行文件的批处理文件未 运行 正确

Batch file wrapped as an IExpress executable does not run properly

我已经使用 iexpress.bat 文件包装在 .EXE 文件中。

.bat 文件包含在 Windows 上安装我的项目的命令。

我按照所有步骤操作并得到了一个 .exe 文件,但是当 运行 它显示完成的消息但什么也没做。 (bat文件里面没有命令是运行ning).

@echo off
echo %DATE% >> "C:\Users\gaubansa\Desktop\my.txt"
echo %PATH% >> "C:\Users\gaubansa\Desktop\my.txt"

.SED 文件的 Cotnets:

[Version]
Class=IEXPRESS
SEDVersion=3
[Options]
PackagePurpose=InstallApp
ShowInstallProgramWindow=1
HideExtractAnimation=0
UseLongFileName=0
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=Write
DisplayLicense=
FinishMessage=ho gya
TargetName=C:\Users\gaubansa\Desktop\my.EXE
FriendlyName=Write
AppLaunched=cmd.exe /c my_personal.bat
PostInstallCmd=<None>
AdminQuietInstCmd=
UserQuietInstCmd=
FILE0="my_personal.bat"
[SourceFiles]
SourceFiles0=C:\Users\gaubansa\Desktop\
[SourceFiles0]
%FILE0%=

根据您发布的 Iexpress 指令 (.SED) 文件,问题是您将 Iexpress 配置为使用短文件名在包中存储文件名,因此您的批处理文件 my_personal.bat 将存储在使用其短文件名 MY_PER~1.BAT 的包,但您已将 cmd /c my_personal.bat 指定为 运行 您的批处理文件,因此 cmd 无法找到 my_personal.bat.

要解决这个问题,请在 Iexpress 中选择 Store files using Long File Name inside Package 选项。或者,您可以编辑 SED 文件并将指令 UseLongFileName=0 更改为 UseLongFileName=1,然后在 Iexpress GUI 中 select Open existing Self Extraction Directive file

一些补充建议

虽然您的批处理文件名不包含空格或其他特殊字符,但最好将文件名括在引号中。所以你应该把 AppLaunched=cmd.exe /c my_personal.bat 改成 AppLaunched=cmd.exe /d /c "my_personal.bat"
/d 开关是可选的,它是为了防止 cmd 执行可能存在于 cmd 的自动运行注册表设置中的命令。您可以通过在命令提示符下键入 CMD /? 来获取有关它的更多信息。

一个更安全的选择是使用 AppLaunched=cmd.exe /d /s /c ""my_personal.bat"" 因此,如果将来您决定重新打包批处理文件并将一些带引号的参数传递给它,您可以这样做而不必担心必要的引号被删除命令。

例如:cmd.exe /d /s /c ""my_personal.bat" "Quoted Param1" "Quoted Param2" UnquotedParam3"