1

我曾经将文件iexpress包装.bat.EXE文件中。

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

我按照所有步骤操作,得到了一个.exe文件,但是运行时它显示了一个完成的 msg,但什么也没做。(bat 文件内没有命令正在运行)

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

.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:\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%=
4

1 回答 1

1

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

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

一些额外的建议

尽管您的批处理文件名不包含空格或其他特殊字符,但将文件名括在引号中始终是一个好习惯。所以你应该改成AppLaunched=cmd.exe /c my_personal.batThe AppLaunched=cmd.exe /d /c "my_personal.bat"
switch /dis optional,它是为了防止 cmd 执行可能存在 cmd 的 AutoRun 注册表设置的命令。CMD /?您可以通过在命令提示符下键入来获取有关它的更多信息。

如果您决定重新打包批处理文件并将一些带引号的参数传递给它,那么将来会使用一个更安全的选项AppLaunched=cmd.exe /d /s /c ""my_personal.bat"",您可以这样做,而不会有 cmd 删除基本引号的风险。

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

于 2018-07-19T18:04:58.733 回答