如何将java和JRE打包生成绿色版程序

如何将java和JRE打包生成绿色版程序,第1张

首要有必要了解一下java.exe 如何寻找JRE库的:

当在控制台执行java.exe, *** 作系统寻找JRE的方式如下:

1) 先找当前目录下有没有JRE

2)再找父目录下有没有JRE

3)接着在PATH路径中找JRE

4)注册表HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\ 查看CurrentVersion的键值指向哪个JRE

2.JRE类库查找

JRE自带的基础类库主要是JRE\lib\rt.jar这个文件,包括了Java2平台标准版的所有类库。和JRE的版本一致。

JRE中由ClassLoader负责查找和加载程序引用到的类库,基础类库ClassLoader会到rt.jar中自动加载,其它的类库,ClassLoader在环境变量CLASSPATH指定的路径中搜索,按照先来先到的原则,放在CLASSPATH前面的类库先被搜到,Java程序启动之前建议先把PATH和CLASSPATH环境变量设好,OS通过PATH来找JRE,确定基础类库rt.jar的位置,JRE的ClassLoader通过CLASSPATH找其它类库。但有时候会出现这样的情况,希望替换基础类库中的类库,那么也可以简单的通过-Djava.endrosed.path=...参数传递给java.exe,于是ClassLoader会先于基础类库使用java.endrosed.path参数指定路径的类库。因此Java的版本管理是非常简单有效的,也许很原始,不过很好用,简单就不容易出错。

3.Java的虚拟机启动和加载类库

在Console执行java.exe xxx命令以后,如前所述的寻找JRE,OS找到JRE目录,根据java.exe的传递参数,选择加载Server版的jvm.dll还是Client版的jvm.dll,然后加载jvm.dll,把控制权交给jvm.dll。

接下来,jvm.dll进行初始化,分配内存等等动作,然后在CLASSPATH路径中寻找class,找到class以后,寻找class中的程序入口点Main函数,然后从Main函数执行程序,在执行过程中,使用ClassLoader动态加载一系列引用到的类。当调用到native方法时,jvm.dll告诉OS在JRE\bin目录下寻找某某DLL文件,调入内存,于是实现了JNI调用。

以下以三个例子,说明如何打包JRE和第三方类库,根据需求综合来使用就可以了:

一、

1.首先将程序打包(这一步可以通过eclipse的导出完成)。

2.为项目添加第三方jar包。在第1步打好的jar包的同级目录下,新建一个lib(名字可以自取)文件夹。用winrar等解压文件打开第1步做好的jar包,到META-INF目录下,打开MANIFEST.MF文件,修改它:在Main-Class上面一行加上:Class-Path:lib/1.jar lib/2.jar其中lib是刚才我们建的文件夹名,1.jar和2.jar是我们需要的第三方包,每两个第三方包之间由空格分开。

3.在第1步打好的jar包的同级目录下,新建一个jre文件夹,把jre运行环境考贝到这里面来。

4.在第1步打好的jar包的同级目录下,新建一个文本文档,加上下面的语句:start jre/bin/javaw -jar HydraKyouFeng_v0.2s_swt.jar

这表示通过同级目录里面jre文件夹下的javaw -jar来运行我们的jar包(也就是第1步打好的jar包,我这里的名字是HydraKyouFeng_v0.2s_swt)。

5.到了这一步,我们双击jar包已经能在原本没有jre环境平台里面直接运行了。

二、

运行实现希望目的目录结构(以test目录为例):

test 存项目java文件生成的.class,.jar 等文件.

test/jre/bin 复制对就jdk中的 bin目录就可以。

test/jre/lib 复制对就jdk中的 jre/lib 目录就可以。

建立以上目录结果之后就可以将test/jre/bin/java.exe 发送到桌面快捷方式。

然后修改一下那快捷快方式 目标(T)标位 改成 ...../test/jre/bin/java.exe test ,

这里要注意的是 起始位置(S) 一起在改一下!如下:...../test/ 。

随后使用javaw.exe启动。

三、

1、先创建一个manifest.mf的文件,内容为

Main-Class: ExcelCount(class类路径,我的为与manifest.mf相同路径)换行

2、将程序中要导入的jar包解压,放到相同目录中,我的为org文件夹

3、运行cmd,输入如下

jar cvfm ExcelCount.jar manifest.mf ExcelCount.class ExcelCount$1.class OpenListener.class org

其中ExcelCount.jar为将要生成的jar文件,三个.class文件是要打包的文件,org即为引入jar包所在文件即可生成可执行jar包

4、运行jar文件

jar文件可以在安装jdk的机器上直接运行,启动cmd命令,输入java -jar jar文件路径,也可以运行与没有安装jdk的机器上,不过要将jdk安装后目录下的jre文件,我的为D:\java\jdk1.6.0_3\jre,全部复制到jar文件所在目录下,再新建一个名为run.bat的文件,run.bat文件的内容为

start jre\bin\javaw -jar jar文件名

我的此文件内容为

start jre\bin\javaw -jar ExcelCount.jar

以后再没有安装jdk的机器上只要运行run.bat文件就可以了

绿色软件以其小巧实用、无需安装、不给系统增加垃圾文件而受到广大用户的青睐。可惜目前网络上提供的绿色软件较少,在功能应用上也比较单一。如果我们常用的,如文字图像处理、杀毒、多媒体等类型软件都是绿色的,那该多好啊!利用Windows优化大师,就能实现这一梦想。

下载安装完成后,运行优化大师,在左方的功能列表中点击进入“系统清理维护”类别中的“软件智能卸载”,页面上方的程序列表中提供了当前电脑中已经安装的全部应用程序名单,先在该名单中选择一个要制作成绿色软件的目标软件,然后点击右边的“分析”按钮,优化大师即开始智能分析与该应用程序相关的信息(如果要分析的软件没有出现在列表中,请点击“其他”按钮,手动选择要分析的软件)。

这里笔者以选择FlashGet(网际快车)为例,详细讲述优化大师如何制作软件的绿色运行版。

根据所分析软件的大小以及复杂程度,智能分析大概需要几十秒到数分钟不等的时间,待分析完成后,即可在下方的关联文件框中看到该软件正常运行时所需要的所有文件,注册表键值信息也在其中,如图1所示。请将这些注册表键值先行记下,单击“卸载”按钮,优化大师开始备份相关的注册表信息和文件信息,接着进行卸载 *** 作。卸载完毕后,刚才所有被智能分析的文件,都被保存到了Windows优化大师安装目录下的\Backup\UninstallFiles文件夹中,将这里的文件全部复制提取出来,放在一个新文件夹中,例如笔者为该文件夹起名为“FlashGet绿色安装包”。

在“开始→运行”中输入regedit命令,打开注册表编辑器,依次选择“编辑→查找”,在“查找目标”中输入刚才记下的注册表键值名称和相应键值(如图2所示)。找到后,在该键值上单击右键,选择“导出”命令,将软件的注册表文件全部导出到之前的“FlashGet绿色安装包”文件夹中。这样FlashGet的绿色软件安装包就做好了。

将该安装包拷贝到未安装FlashGet的电脑上,双击安装包中的“.reg”文件,导入注册表信息,最后执行软件主程序,FlashGet就能够在这台电脑上运行了。

小提示:在理论上,以此种方法可以将所有软件全部制作成绿色运行版,但由于大型软件的注册表键值和关联文件为数众多,在查找时需要耗费大量的时间,这就违背了绿色软件“精简易用”的宗旨,因此建议大家以此法制作大小在50M以下的中小软件为佳。

此外,以此方法制作的绿色软件在性质上并无改变,软件前身如果是共享软件,那么“变身”后也依然是共享软件。其他性质亦然。

制作迷你软件一般分为三个步骤:

1.查找软件所需最少的键值。

2.查找软件所需最少的文件。

3.根据使用情况自定义软件的安装位置,打包。

制作迷你软件不需要太深的知识,只要对电脑有一定的了解就行,最好有自己的电脑,经常安装系统和应用程序,知道基本的文件类型,会简单的处理注册表和注册表文件。有了这些就可以自己制作迷你软件了,最好是对程序和注册表有一定的了解,这样可以我使查找工作简单一些,不过即使对这些懂得不多也可以学习着制作的,我就是从不懂开始的,而且没有人教我,关键是动脑筋,举一返三。在这里我介绍一下制作迷你软件的经验,方法很简单,很落后,希望高手们不要笑话。

一、如何查找软件所需最少的键值。

这里所说的查找,是指着那些大型的软件,有些软件如:Acdsee2.4和超级兔子2002,这类软件只需要只需要一两个注册信息的键就可启动,在正常安装时,在输入完注册码以后把注册码记下来,然后打开注册表,在里面搜索一下,一般会找到刚才输入的注册码,然后把找到的键保存出来就行。下次换系统的时候无需安装,直接把注册信息导入新系统就行。

一般软件的注册信息都保存在[HKEY_LOCAL_MACHINE\SOFTWARE\]这个键下,在这个键中会有和程序名相同的子键,注册信息就保存在其中。至于什么软件是这种只需要一个注册信息的软件在制作之前很难看出来。只能猜测。

我制作的第一个迷你软件是Word97,是office97办公软件中的一个。这个程序不需要注册表的键也可以正常运行,但是每次启动的时候都会出现错误报告,正常安装时则没有这个错误报告。我就把正常安装后的系统的注册表全部导出来,再把这些信息导放到一个新系统中,这时软件启动的时候就没有错误报告了。这样一来我就知道了,这个软件只需要注册表中的键值就不会出现错误提示。但是到底需要哪个键值还不知道。所以我又返回正常安装的系统,把注册表的六个根键分别导出来。这样就可当于把整个注册表信息分成六份。然后我又找上一个新系统,再把六个根键的信息分别导入新系统,当我把第一个根键的信息导入新系统以后,软件启动时就不再报错,这说明软件所需要的键就在第一根键中。

面对一个陌生的软件,不知道它究竟需要哪个键,就用这种方法去猜测,上面的例子只用了一次就查出来,所需要的键值在第一根键中。这样虽然不知道具体是哪个键,但是它缩小了寻找的范围。接下来在这个根键中寻找。这种方法虽然笨了点,但它还是很有用的。

第一根键中有成千上万个子键,直接找实在是找不过来。当时我的知识少,看到这么多的键,当时就放弃了,以为自己没有能力找出来,一直到一年多以后才又开始查找它。

我用的方法是很简单的,我不知道它需要什么键,也不知道所要的键在哪里,但是我知道它就在第一根键中,所以,我把第一根键手工分成三份,然后把中间的一份导入一个新系统,启动软件的时候还报错,再把第三份导入系统,这回软件就可以正常启动,这说明软件所需要的键有可能在第三份中,也有可能在第二和第三份中,所以我又找一个新系统,把第三份导入到系统中,软件启动时还报错,我再把第二份导放系统中,软件就可以正常启动,这说明软件需要的键在第二份和第三份中,第一份是没有用的,就把第一份扔掉。

通过上面的这一步,我还是不知道软件所需的键在哪里,但是我知道它在第一根键的中间和结尾部分,通过上面一步,我把查找范围缩小了三分之一,然后再用同样的方法,把这两份各自分成三份,共六份注册表键值。然后再换上一套新系统,再分别把它们导入。如果导入四个“部分”后可以正常启动word,就说明所需键值在这四份中,另两份是没有用的,这样又把查找的范围缩小了,然后再分,再导……通过这种方法,一点一点的缩小范围,剩下的我虽然不知道它在哪里,但是一定在其中,为了查找软件所需要的键值,我换了近二十多个系统,重启了几十次电脑,最后在几千几万个键值中找到软件所需要的最少的键值。

上面的过程不知道您看懂没有,没有技巧,全是猜的,一点一点的缩小范围。我就是用这种:“排除法”来查找键值的,每次查找一个软件都要换掉好几个系统。我也知道这种方法麻烦,写出这些的时候我也脸红过,但是我没有更多的方法,也不会运用软件,那时我只是个初学者,这种方法不需要对注册表了解太多,只要有些基本常识就够了。我就是用这种最笨的方法制作了word2000迷你版和FrontPageXP迷你版,

我转个帖子给楼主,希望能对这个问题有点帮助~~!

实现“绿色”软件(影子版主)

现在非常流行“绿色”软件,不需要什么安装程序只要一个 EXE 文件就可以运行程序

了,而在 VB 的编程中有许多地方需要调用第三方的控件(很难用 API 函数搞定所有的功能),这就需要制做一个安装程序,把所需要的控件、DLL 文件或其他文件打包进去了,那么在 VB 中怎么用变通的方法实现“绿色”软件呢,请看:

示例:

1、主程序.EXE

用 VB6.0 编写的程序,调用了 Winsock 控件,如果在没有安装 VB5.0、6.0 的机器上运行则会出现错误,导致程序运行失败,这时如果按一般的方法,只有把这个程序用 VB5.0、6.0 的安装程序进行打包,不然只有用用2的方法来解决了。

2、注册程序.EXE

用 VB6.0 编写的程序,使用资源文件的方法,把 Winsock 控件封装到本程序中,在运行主程序.EXE之前,先运行本程序,通过 API 函数 GetSystemDirectory 取得系统的 Winddows\System 的目录,然后把 Winsock 控件复制到该目录下,并用 Shell 来完成控件的注册。

⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”

⑵在 VB 资源编辑器窗口中,点击“添加自定义资料”,增加 Winsock 控件(C:\Winddows\System\Mswinsck.ocx),再双击刚刚创建的自定义资源,d出”编辑属性”窗口,定义如下:

类型: “OCX”

标识号: 101

语言: 中文(中国)

⑶保存资源文件,写如下代码:

Option Explicit

Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

Const MAX_PATH = 260 '定义足够长的字符串

Private Sub Form_Load()

Dim TempFile() As Byte

Dim FileNum As Integer

Dim TempDir As String

TempDir = GetWinSysDir '自定义函数取得系统的 Winddows\System 的目录

TempFile = LoadResData(101, "OCX") '用以从资源 (.res) 文件装载若干可能类型的数据,并返回一个 Byte 数组

FileNum = FreeFile

Open TempDir & "\Mswinsck.ocx" For Binary Access Write As #FileNum '新建文件(把 Winsock 控件复制到指定目录下)

Put #FileNum, , TempFile

Close #FileNum

'Shell "regsvr32 " & TempDir & "\Mswinsck.ocx ", vbNormalFocus '注册控件,有d出对话框

Shell "regsvr32 " & TempDir & "\Mswinsck.ocx /s", vbNormalFocus '注册控件,无d出对话框

MsgBox "注册成功,现在本程序可正常运行了!!", vbOKOnly, "注册控件"

Unload Me

End Sub

Public Function GetWinSysDir() '定义读取Winddows\System 的所在目录的函数

Dim S As String, Length As Long

S = String(MAX_PATH, 0) '赋值

Length = GetSystemDirectory(S, MAX_PATH) 'S为取得目录,MAX_PATH 为长度

S = Left(S, InStr(S, Chr(0)) - 1) '去掉多余的空格

GetWinSysDir = S

End Function

'补充:S 和 MAX_PATH 的值是可以随便赋的,

'如: Dim S As String * 20

' Length = GetSystemDirectory(S, 20)

3、补充说明

在用 VB6.0 保存上述两个程序后,请再使用 VB5.0 重新打开这两个程序,并编译为主程序.EXE、注册文件.EXE。(用 VB5.0 编译的程序,在 Win98、2000 下不需要任何 DLL 文件)

程序运行

4、程序运行

将主程序.EXE、注册文件.EXE两个文件,复制到任意机器上,先运行注册文件.EXE注册第三方的控件,再运行主程序.EXE,就不会有任何的错误了,一个变通的“绿色”软件就完成了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11791460.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存