我用izpack做了一个安装程序。它在 .jar 文件中。我想在 .exe 文件中制作它以便分发它。我怎样才能以简单的方式做到这一点?
3 回答
Andrew 总是喜欢从一开始就推广Java Web Start技术 :) 这是一项不错的技术。但是,您还需要先学习技术部分,然后才能开始修补它。
否则,您将使用旧式 EXE 分发模型,如下所示...
无论如何,我对Izpack并不熟悉。但是,对于izPack可以做什么,有类似的单独工具可以实现组合结果。我最喜欢的 EXE 创建和安装工具是从Eclipse IDE运行的Launch4J + InnoSetup + Ant 任务。
Launch4J是一个 Java 应用程序启动器。 InnoSetup是一个安装创建者 Ant 任务,可帮助开发人员进行构建和集成步骤。
如何使用 Launch4J + InnoSetup + Ant 构建任务 + Eclipse IDE: http ://www.eteks.com/tips/tipCreationExe.html (法语 - 使用谷歌翻译)
当您考虑为 Java 应用程序分发基于桌面的 Windows EXE 文件时,您还需要考虑目标环境。当您以 Windows XP 或更低版本为目标时,这很好。但是,当你想让它在 Windows Vista 和 Windows 7 下正常工作时,它会开始成为一个主要的挫折。
最好不要%ProgramFiles%
在 Windows Vista/Windows 7 下存储需要保存的应用程序配置、临时文件等,因为它现在变成了只读文件夹。为此目的使用用户的个人资料文件夹。
当然,您可以通过使用“以管理员身份运行”运行您的应用程序来绕过它,但它涉及以下设置:
Windows Vista 和 Windows 7 通过用户访问控制 (UAC) 提示功能引入了严格的用户访问策略。软件安装必须使用管理员组下的用户帐户完成。默认 Windows 系统下的所有文件夹
Program Files
都设置为只读,当尝试在其中保存内容时,可能会导致非管理员用户帐户出现问题。要使用非管理员用户帐户运行 Java 应用程序,必须将应用程序属性设置为 enableRun as administrator
。应在桌面中创建一个快捷方式,并将其设置为启用Run as administrator
。
如何解决以下问题:
(1) AppUserModelID
Windows Vista/Windows 7 中的 Java 支持问题需要以下解决方案:
Launch4j、NSIS 和重复固定的 Windows 7 任务栏图标
(2) Run as Administrator
Java 应用程序的问题需要以下解决方案:
在 Windows Vista 上请求 Java 应用程序的管理员权限
除此之外,您还需要%ProgramFiles%
在 64 位 Windows 版本下运行时进行检查。32 位 Windows 和 64 位 Windows 之间的路径不同。在 64 位 Windows 下,所有 32 位应用程序都将进入%ProgramFiles(x86)%
.
因此,在将硬编码文件路径值用于 Java 应用程序的文件夹和安装在%ProgramFiles%
. 最好在下面的 ISS 文件片段中设置一个Windows environment variable
可以由InnoSetup生成的。使用 JavaSystem.getenv("MYAPP_HOME")
检索变量:
[Registry]
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; Flags: uninsdeletevalue; ValueType: string; ValueName: "MYAPP_HOME"; ValueData: "{app}\"
[Tasks]
Name: modifypath; Description:"Add application directory to your environmental path"; Flags: unchecked
[Run]
Filename: "{app}\MyApp.EXE"; Parameters: """{app}""\"; WorkingDir: "{app}\"; Description: "Run MyApp"; Flags: postinstall nowait skipifsilent
[Code]
const
ModPathName = 'modifypath';
ModPathType = 'system';
function ModPathDir(): TArrayOfString;
begin
setArrayLength(Result, 1)
Result[0] := ExpandConstant('{app}');
end;
#include "modpath.iss"
实验和享受!
winrun4j非常易于使用,我唯一的问题是,除非您使用嵌入式 JVM 进行分发,否则您可能必须同时提供 64 位和 32 位下载。
如果应用程序。有一个 GUI,你可以从一个网站分发,Java Web Start提供了最好的解决方案。JWS 适用于支持 Java 的所有平台,并且受 Oracle 支持。
(我听说 .Net 适用于“仅限 Windows”的解决方案。)