【发布时间】:2011-08-04 13:05:54
【问题描述】:
我用 izpack 制作了一个安装程序。它在 .jar 文件中。我想在 .exe 文件中制作它以便分发它。我怎样才能轻松地做到这一点?
【问题讨论】:
标签: java jar installation exe izpack
我用 izpack 制作了一个安装程序。它在 .jar 文件中。我想在 .exe 文件中制作它以便分发它。我怎样才能轻松地做到这一点?
【问题讨论】:
标签: java jar installation exe izpack
如果应用程序。有一个 GUI,您可以从网站分发,Java Web Start 提供了最佳解决方案。 JWS 适用于所有支持 Java 的平台,并且受 Oracle 支持。
(我听说 .Net 适用于“仅限 Windows”的解决方案。)
【讨论】:
Andrew 总是喜欢从一开始就推广 Java Web Start 技术 :) 这是一项不错的技术。但是,您还需要先学习技术部分,然后才能开始修改它。
否则,您将使用旧式 EXE 分发模型,如下所示...
反正我对 Izpack 并不熟悉。但是,对于 izPack 可以做什么,有类似的单独工具可以实现组合结果。我最喜欢的 EXE 创建和安装工具是 Launch4J + InnoSetup + Ant task 从 Eclipse IDE 运行。
Launch4J 是一个 Java 应用启动器。 InnoSetup 是安装创建者 Ant 任务帮助开发人员完成构建和集成步骤。
如何使用 Launch4J + InnoSetup + Ant build task + Eclipse IDE: http://www.eteks.com/tips/tipCreationExe.html(法语 - 使用谷歌翻译)
当您考虑为 Java 应用程序分发基于桌面的 Windows EXE 文件时,您还需要考虑目标环境。当您以 Windows XP 或更低版本为目标时,这很好。但是,当你想让它在 Windows Vista 和 Windows 7 下正常工作时,它会开始成为一个主要的挫折。
最好不要在 Windows Vista/Windows 7 下存储需要保存到%ProgramFiles% 的应用程序配置、临时文件等,因为它现在变成了一个只读文件夹。为此目的使用用户的个人资料文件夹。
当然,您可以通过使用“以管理员身份运行”运行您的应用程序来绕过它,但它涉及以下设置:
Windows Vista 和 Windows 7 具有 引入了严格的用户访问策略 通过用户访问控制 (UAC) 提示功能。该软件 必须使用用户完成安装 管理员组下的帐户。 默认 Windows 下的所有文件夹 系统
Program Files设置为 只读,可能会导致问题 到非管理员用户帐户 当试图在其中保存一些东西时。使用 非管理员用户帐户, 应用程序属性必须设置为 启用Run as administrator。一种 快捷方式应在 桌面并设置为启用Run as administrator。
如何解决以下问题:
(1) Windows Vista/Windows 7 中AppUserModelID Java 支持的问题需要以下解决方案:
Launch4j, NSIS, and duplicate pinned Windows 7 taskbar icons
(2) Java 应用程序的Run as Administrator 问题需要以下解决方案:
Request admin privileges for Java app on Windows Vista
除此之外,在 64 位 Windows 版本下运行时,您还需要检查 %ProgramFiles%。 32 位 Windows 和 64 位 Windows 之间的路径不同。在 64 位 Windows 下,所有 32 位应用程序都将进入 %ProgramFiles(x86)%。
因此,在将硬编码文件路径值用于安装在 %ProgramFiles% 中的 Java 应用程序的文件夹和子文件夹时,请务必小心。最好在下面的ISS文件sn-p中设置一个Windows environment variable可以由InnoSetup生成。使用 Java System.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 位下载。
【讨论】: