11

我用izpack做了一个安装程序。它在 .jar 文件中。我想在 .exe 文件中制作它以便分发它。我怎样才能以简单的方式做到这一点?

4

3 回答 3

8

Andrew 总是喜欢从一开始就推广Java Web Start技术 :) 这是一项不错的技术。但是,您还需要先学习技术部分,然后才能开始修补它。

否则,您将使用旧式 EXE 分发模型,如下所示...

无论如何,我对Izpack并不熟悉。但是,对于izPack可以做什么,有类似的单独工具可以实现组合结果。我最喜欢的 EXE 创建和安装工具是从Eclipse IDE运行的Launch4J + InnoSetup + Ant 任务

Launch4J是一个 Java 应用程序启动器。 InnoSetup是一个安装创建者 Ant 任务,可帮助开发人员进行构建和集成步骤。

如何使用 Launch4J + InnoSetup + Ant 构建任务 + Eclipse IDEhttp ://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 应用程序,必须将应用程序属性设置为 enable Run as administrator。应在桌面中创建一个快捷方式,并将其设置为启用Run as administrator

如何解决以下问题:

(1) AppUserModelIDWindows Vista/Windows 7 中的 Java 支持问题需要以下解决方案: Launch4j、NSIS 和重复固定的 Windows 7 任务栏图标

(2) Run as AdministratorJava 应用程序的问题需要以下解决方案: 在 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"

实验和享受!

于 2011-04-13T09:46:09.420 回答
0

winrun4j非常易于使用,我唯一的问题是,除非您使用嵌入式 JVM 进行分发,否则您可能必须同时提供 64 位和 32 位下载。

于 2012-08-22T19:20:21.513 回答
0

如果应用程序。有一个 GUI,你可以从一个网站分发,Java Web Start提供了最好的解决方案。JWS 适用于支持 Java 的所有平台,并且受 Oracle 支持。

(我听说 .Net 适用于“仅限 Windows”的解决方案。)

于 2011-04-13T09:20:41.553 回答