我已经使用iexpress
将.bat
文件包装在.EXE
文件中。
.bat
文件包含用于在Windows上安装我的项目的命令。
我遵循了所有步骤,并得到了一个.exe
文件,但是运行时它显示了已完成的味精,但未执行任何操作。 (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%=
答案 0 :(得分:0)
根据您发布的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的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"