包装为IExpress可执行文件的批处理文件无法正常运行



我使用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"

相关内容

  • 没有找到相关文章

最新更新