我使用iexpress
将.bat
文件包装在.EXE
文件中。
.bat
文件包含在Windows上安装我的项目的命令。
我遵循了所有的步骤,得到了一个.exe
文件,但当运行时,它显示了一个完成的消息,但什么也没做(bat文件中没有运行任何命令(。
@echo off
echo %DATE% >> "C:UsersgaubansaDesktopmy.txt"
echo %PATH% >> "C:UsersgaubansaDesktopmy.txt"
的Cotnets。SED文件:
[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:UsersgaubansaDesktopmy.EXE
FriendlyName=Write
AppLaunched=cmd.exe /c my_personal.bat
PostInstallCmd=<None>
AdminQuietInstCmd=
UserQuietInstCmd=
FILE0="my_personal.bat"
[SourceFiles]
SourceFiles0=C:UsersgaubansaDesktop
[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中选择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删除的风险。
例如:cmd.exe /d /s /c ""my_personal.bat" "Quoted Param1" "Quoted Param2" UnquotedParam3"