使用Desktop App Converter转换Inno-Setup程序时卡在隔离环境安装等待
我帮你分析下这个问题:你用DAC转换Inno Setup打包的安装包时卡在Waiting for installer process to complete inside Isolated Environment,移除Java安装的[Run]段就正常,单独运行静默安装也没问题,核心原因是Java安装程序在DAC的隔离环境中没有完全静默完成,或者隔离环境的特殊状态导致Java安装流程卡住了。
下面是针对性的解决方案,按优先级尝试:
1. 给Java安装程序添加完全静默参数
你的Java安装命令只加了SPONSORS=0,但Java 8的安装包需要/s参数才能完全静默执行,而且要加上runhidden标志避免窗口弹出。修改Inno Setup的[Run]段:
[Run] Filename: "{tmp}\{#JavaInstaller}"; Parameters: "/s SPONSORS=0"; \ StatusMsg: "Java Runtime Enviroment not installed on your system. Installing..."; \ Check: not isJavaInstalled; BeforeInstall: ExtractInstaller; Flags: runhidden
/s是Java 8安装包的标准静默参数,runhidden会让安装程序在后台执行,不会在隔离环境中触发交互窗口。
2. 强化Inno Setup的静默安装参数
虽然你已经用了/VERYSILENT,但可以补充更多参数彻底避免弹窗或重启提示,修改DAC的命令:
DesktopAppConverter.exe -Installer "C:\Users\Desktop\Output\setup.exe" -Destination "C:\Users\Desktop\MyProgram\" -PackageName "MyProgramApps" -Publisher "Me" -Version 0.1.4.0 -MakeAppx -Verbose -InstallerArguments "/VERYSILENT /SUPPRESSMSGBOXES /NORESTART" -PackagePublisherDisplayName "MyApps" -PackageDisplayName "MyProgram" -AppDisplayName "MyProgram" -AppId "MyProgram"
/SUPPRESSMSGBOXES会屏蔽所有提示框,/NORESTART禁止安装程序触发系统重启,这两个参数能进一步降低隔离环境中卡住的概率。
3. 优化Java检测逻辑,或直接打包本地JRE
DAC的隔离环境注册表结构和普通系统有差异,你的isJavaInstalled()函数可能误判Java未安装,导致不必要的Java安装流程。更稳妥的方式是把JRE直接打包到程序目录,不需要在安装时动态安装:
- 把JRE的所有文件复制到你的程序资源目录(比如
C:\Users\Desktop\resources\jre) - 修改Inno Setup的[Files]段,将JRE同步到安装目录:
[Files] Source: "C:\Users\Desktop\resources\MyProgram.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\Users\Desktop\resources\jre\*"; DestDir: "{app}\jre"; Flags: recursesubdirs ignoreversion
- 修改程序的启动方式,让它调用本地JRE(比如写个批处理
start_myprogram.bat):
@echo off "%~dp0jre\bin\java.exe" -jar "%~dp0MyProgram.exe"
- 最后在Inno Setup的[Icons]和[Run]段,把指向
MyProgram.exe的路径改成这个批处理文件。
这种方式完全避免了安装时的Java安装流程,从根源上解决DAC卡住的问题,同时还能保证程序运行时依赖的JRE版本稳定。
4. 查看DAC的详细日志定位问题
你已经加了-Verbose参数,执行转换时可以留意日志里关于jre-8u151-windows-x64.exe的输出,看是否有错误提示(比如权限不足、文件找不到等),这些信息能帮你更精准地定位问题。
内容的提问来源于stack exchange,提问作者Gerry

