我开发了一个桌面Swing应用程序,我正在考虑提供自动更新功能的最佳方法.我知道JavaWebStart提供了这个,但我认为它不适合我的需要,因为我需要读取本地文件,所以我需要签署jar.此外,JWS需要额外的工作才能在服务器中部署,而现在我只需要上传.jar.
我一直在考虑这种方法:
第一个JAR(永远不需要更新)加载启动画面,检查config.xml中的当前版本并将其与服务器config.xml进行比较.
如果服务器版本较新,请询问用户是否要更新.在这种情况下,下载新的"main.jar",新的"config.xml"和新的splash/icon,检查MD5SUM,并用新的文件替换旧文件.
启动"main.jar".
我不知道如果我正在尝试重新发明轮子,或者如果有一个比我上面提到的更好的模式.
什么是clickonce的开源替代品?我觉得最受欢迎和积极开发的一个?
谢谢
PS.我从搜索中得到了一些,但是会感谢人们的反馈如何审查这些,并了解哪个是最受欢迎/值得先研究的.
.NET应用程序更新程序组件 - http://windowsclient.net/articles/appupdater.aspx
nlaunch - http://code.google.com/p/nlaunch/
dotnetautoupdate http://code.google.com/p/dotnetautoupdate/
我想要一个自动更新程序,检测修改过的文件(通过比较客户端和服务器上的文件),只下载修改过的文件.我也希望它能给我一个生动的状态(在流程栏上显示它或者什么)
场景是网络中有大约一千个客户端使用相同的应用程序.如果有新版本的应用程序可用,则必须获得新版本.但是,带宽是有限的,因此每次为它们提供完整的安装程序效率不高.(我们目前所做的)
我搜了一下,发现了IcePatch2.它完全符合我的要求:在运行修补程序时从服务器获取最新文件.但问题是客户端用C#编写,我不能在我的应用程序中使用IcePatch2 .(我必须将它作为一个单独的进程运行,或者写一个COM或者与IcePatch2Client进行交互的东西)
到目前为止,我找到的最佳解决方案是获取.NET Application Updater组件并对其进行自定义以满足我的需求.但我更喜欢一种不需要我维持另一种应用的解决方案.
任何的想法?
我开发了一个Java Swing应用程序,它将安装在不同位置的多个客户端上.该应用程序将由我手动安装.但我想通过互联网自动更新应用程序,无需用户交互,类似于Google Chrome的更新方式.
在Java Swing中实现此自动更新功能的替代方法有哪些?有没有可以解决这个问题的好的第三方框架?或者我可以使用任何Java内置功能吗?
我做了一个非常基本的chrome扩展,并设置了一个简单的node.js服务器来测试自动更新功能.服务器托管.crx文件,这样我只需访问就可以毫无困难地安装扩展程序http://localhost:3000/clients/chrome/extension.crx.但是当我转到tools- > extensions并单击时Update extensions now,扩展程序不会获取新版本.服务器确实收到请求localhost:3000/clients/chrome/updates.xml,但没有收到任何新的extension.crx文件请求.我在这做错了什么?
码
让我告诉您完成代码以使其可重现:
$ tree
.
|-- clients
| `-- chrome
| |-- extension
| | `-- manifest.json
| |-- extension.crx
| |-- extension.pem
| `-- updates.xml
`-- web.js
Run Code Online (Sandbox Code Playgroud)
扩展名实际上只是一个清单文件.
的manifest.json
{
"name": "testing auto-updates",
"version": "1.0",
"update_url": "http://localhost:3000/clients/chrome/updates.xml"
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我指的是update_url以使自动更新成为可能.
updates.xml
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='fkphbmkcjefhhnnlhhjlnkellidponel'>
<updatecheck codebase='http://localhost:3000/clients/chrome/extension.crx' version='1.0' />
</app>
</gupdate>
Run Code Online (Sandbox Code Playgroud)
打包扩展名会创建extension.crx和extension.pem.
我还制作了一个简单的node.js服务器来提供文件:
web.js
var express = require('express'); …Run Code Online (Sandbox Code Playgroud) 每当我在Market中发布我的应用程序的新版本时,如果用户启用了"自动更新"选项,该应用程序将自动更新.
该应用程序包含一个不断运行的服务.但是当自动更新发生时,旧的正在运行的应用程序被终止,但新的应用程序未启动.由于更新主要是透明地发生在用户身上,因此应该在更新后自动重新启动应用程序的服务,以便几乎不会中断服务.
使用市场上的真实更新对此进行测试有点困难,因此我使用以下两个adb命令来模拟此更新过程.安装第一版:
adb install oldversion.apk
Run Code Online (Sandbox Code Playgroud)
自动更新:
adb install -r newversion.apk
Run Code Online (Sandbox Code Playgroud)
运行第二个命令后,应用程序成功更新,但已停止但未重新启动.
我们如何让新版本的服务自动启动?
我知道,当添加至少一个新权限时,该应用程序将不会自动更新.用户必须手动更新它.当应用程序的权限发生更改时,您将获得"手动更新".
删除权限怎么样?
我当前的应用版本N已发布.在下一个版本中,将删除一个权限.版本N的用户是否会自动更新?
编辑: https ://android.stackexchange.com/questions/2958/why-do-some-of-my-apps-show-update-and-some-show-update-manual
我在Playstore上有一个应用程序.知道我想要的是当Playstore上有新的更新时,用户在尝试使用该应用程序时应该弹出一个更新应用程序.如果他没有更新应用程序,它应该关闭应用程序.例如:我想强制用户更新应用以继续使用.
我已将图表插入Google文档,但希望自动更新,而不必手动打开文档并按浮动更新按钮.
到目前为止,除了每次都要编写一个脚本来替换每个脚本以外,我发现没有办法做到这一点 - 我还没有感觉到足够强大.
如何自动更新嵌入式图表?
我想知道是否有可能在启动时有一个Java桌面应用程序,查看某个URL,看看是否需要更新,如果是这样,下载必要的JAR文件,并将它们添加到运行程序的类路径中.
如果旧的罐子在那里,它们不应该已经加载到类加载器中,此时应该是吗?是否有可能在加载w/out重启应用程序之前将它们换掉?
auto-update ×10
java ×3
android ×2
google-play ×2
jar ×2
swing ×2
.net ×1
c# ×1
classpath ×1
clickonce ×1
dday ×1
google-docs ×1
patch ×1
service ×1