Java虚拟机启动程序错误:无效或损坏的Jar文件

时间:2015-08-20 19:36:37

标签: java windows certificate exe signed

我正在使用netbeans创建 jar 文件。然后,我使用lanch4j创建此jar文件的 exe 。当我在计算机上运行此 exe 文件时,它运行良好但是当我运行此 exe 时在其他计算机上,它给了我警告

无法验证发布商。您要运行此软件吗

单击“运行”时,exe文件运行正常。

enter image description here

我通过 signtool.exe (包含 windows sdk )将证书添加到我的exe文件中来删除该警告。它成功地将证书添加到我的 exe文件

但是现在当我运行我的exe文件时,它给了我错误

" Java虚拟机启动器 错误:Jar文件无效或损坏 "

enter image description here

Plz帮助我。

感谢。

3 个答案:

答案 0 :(得分:2)

由于您的应用程序尚未签名,因此会抛出此警告。您没有在本地计算机上看到错误,因为您从未传输过该应用程序。你在其他机器上看到它可能是因为你将它上传到某个地方然后将其下载到另一台机器上。

查看此其他问题以获取更多信息:Signing a Windows EXE file

答案 1 :(得分:1)

使用LAUNCH4J将JAR包裹在内部的EXE SIGNER:

1.CERTIFICATION CREATION与普通EXE SIGNER相同。

//$sql = "SELECT * FROM table_name WHERE 1=1" work perfectly
$sql = "SELECT a.* FROM (SELECT table_name FROM information_schema.tables WHERE table_schema like 'rft%') a where 1=1";

if( !empty($requestData['search']['value']) ) 
{   // if there is a search parameter, $requestData['search']['value'] contains search parameter

//search based on input 
$sql.=" AND ( Code LIKE '".$requestData['search']['value']."%' ";    
$sql.=" OR Year LIKE '".$requestData['search']['value']."%' )";
}
 //start search after input 
 $query=mysqli_query($conn, $sql) or die("employee-grid-data.php: get employees");

 $totalFiltered = mysqli_num_rows($query); 

(注意:将此证书导入Windows中certmgr.msc中的可信证书部分。)

然后只有它不会在本地系统显示未知的发布者。

要验证:

在Windows中,只需在开始窗口搜索框中键入 // when there is a search parameter then we have to modify total number filtered rows as per search result. $sql.=" ORDER BY ". $columns[$requestData['order'][0]['column']]." ".$requestData['order'][0]['dir']." LIMIT ".$requestData['start']." ,".$requestData['length']." "; /* $requestData['order'][0]['column'] contains colmun index, $requestData['order'][0]['dir'] contains order such as asc/desc */ $query=mysqli_query($conn, $sql) or die("employee-grid-data.php: get employees"); $data = array(); while( $row=mysqli_fetch_array($query) ) { // preparing an array $nestedData=array(); $nestedData[] = $row["Type"]; $nestedData[] = $row["Code"]; $nestedData[] = $row["Year"]; $data[] = $nestedData; } makecert -r -pe -ss MyCertStore -n "CN=MyTestCert" MyTestCert.cer 将在屏幕上提示,打开它,然后检查证书是否在可信证书部分中成功导入。)

2.使用SIGNTOOL和SIGN4J登录:

certmgr.msc

答案 2 :(得分:0)

使用sign4j验证launch4j exe .. 它避免了罐子腐败..

sign4j signtool sign / s MyCertStore / n My_cert sample.exe

验证此链接..它会帮助你.. here