[标准]OpenDownload:软件下载/更新信息标准化工程

James Swineson

已而!已而!

6人赞了该文章

众所周知,Windows(以及其它部分桌面操作系统)都存在一个巨大的问题:没有统一的软件发布、更新平台。如果要知道哪些软件有更新,要么使用软件自身(如果有也是不那么好用的)自动更新功能,要么使用第三方软件管理器(目前来看最好的还是 360 软件管家,而且有时候数据还会不准),要么去软件的官网查询版本号。累不累?后来看了 OpenSearch 以后我就想搞这么一个叫做 OpenDownload 的东西。开发者在软件官网上面放一个 xml,写明软件的版本,然后任何一个软件管理器都可以读取并且下载正确的正版软件包(甚至自动解决依赖项和下载更新补丁)。浏览器甚至可以在打开软件官网的时候做出类似 Mobile Safari 上面的 App Store 提示条,给出“下载”、“更新”、“打开”的提示。

花了点时间写个示例出来。

 <?xml version="1.0" encoding="UTF-8"?>
 <OpenDownloadDescription xmlns="http://what\_the\_hell\_is\_OpenDownload/DTD/opendownload/0.1">
 
   <!--软件包定义部分-->
   <FullName>My Software</Fullname>
   <ShortName>MySw</ShortName>
   <Description language="en-us">This software can help you to destroy your computer.</Description>
   <Description language="zh-cn">此软件有益身心健康。</Description>
   <Tags>Productivity, Tool</Tags>
   <Contact>admin@example.com</Contact>
   <Image height="64" width="64" type="image/png">http://example.com/mysw.png</Image>
   <Image height="16" width="16" type="image/vnd.microsoft.icon">http://example.com/mysw.ico</Image>
   <Developer>Oh My God</Developer>
   <Attribution>
     Copyright (c) 2013 Oh My God. All rights reserved.
   </Attribution>
   <AdultContent>false</AdultContent>
   <Language>en-us,zh-cn,user\_defined\_language\_support</Language>
   <Website>http://www.example.com</Website>
   
   <!--软件下载信息定义部分-->
   <Download>
   		<!--
   			Installer 表示这是一个完整(可独立运行)的安装文件。
   		-->
   		<Installer version="1.01" os="Windows">
   			<MinOsVersion>5.1.2600</MinOsVersion>
   			<MaxOsVersion>6.1</MaxOsVersion>
   			<AllowUpdate>True</AllowUpdate><!--是否允许从原有程序数据更新到新版本-->
   			<MinUpdateFromVersion>1.00</MinUpdateFromVersion><!--支持的最低更新前程序版本-->
   			<Dependency type="Runtime" required="True" needPreInstall="True" requiredVersion=">4.0" openDownloadDefinition="http://example.com/example.xml">.net Framework 4.0</Dependency>
   			<Dependency type="Extension" required="False" needPreInstall="False" openDownloadDefinition="http://example.com/example2.xml">Kill Your Father's Computer Too</Dependency>
   			<!--
   				Dependency:依赖项。
   				参数解释:
   					type:类型,如 Runtime(运行时)或者 Extension(插件)。
   					required:是否必须。
   					needPreInstall:设为 True 时如果找不到依赖项,安装程序无法继续运行。设为 False 时,安装程序会自动安装依赖项。
   					requiredVersion:需要的版本。支持表达式。
   					openDownloadDefinition:依赖项的 OpenDownload 定义文件。
   					Installer:依赖项的安装包。在 openDownloadDefinition 不可用时自动使用这一项。
   			-->
   		</Installer>
   		<!--
   			Updater 是在线安装器或更新工具。
   		-->
   		<Updater version="1.01" os="Windows">
   			<MinOsVersion>5.1.2600</MinOsVersion>
   			<MaxOsVersion>6.1</MaxOsVersion>
   			<MinUpdateFromVersion>1.00</MinUpdateFromVersion>
   			<SlientUpdateCommand>-q -i</SlientUpdateCommand><!--静默安装命令行参数-->
   		</Updater>
   		<!--
   			Patch 是补丁,需要在已经安装过主程序的情况下运行。
   		-->
   		<Patch version="1.01" os="Windows" Importance="5"><!--Importance表示重要性,1-5,5 为最高级(重大安全更新)-->
   			<MinOsVersion>5.1.2600</MinOsVersion>
   			<MaxOsVersion>6.1</MaxOsVersion>
   			<MinUpdateFromVersion>1.00</MinUpdateFromVersion>
   			<SlientUpdateCommand>-q -i</SlientUpdateCommand>
   		</Patch>
   		<Installer version="1.01" os="Mac OS X">
   			<MinOsVersion>10.3</MinOsVersion>
   			<MaxOsVersion>10.8.4</MaxOsVersion>
   			<AllowUpdate>True</AllowUpdate>
   			<MinUpdateFromVersion>1.00</MinUpdateFromVersion>
   			<Dependency type="Extension" required="False" needPreInstall="False" openDownloadDefinition="http://example.com/example2.xml">Kill Your Father's Computer Too</Dependency>
   		</Installer>
   		<Installer version="1.01" os="Linux" Type="deb"><!--Type 参数用来解决 Linux 发行版安装包格式不同的问题。-->
   			<AllowUpdate>True</AllowUpdate>
   			<MinUpdateFromVersion>1.00</MinUpdateFromVersion>
   			<Dependency type="Extension" required="False" needPreInstall="False" openDownloadDefinition="http://example.com/example2.xml">Kill Your Father's Computer Too</Dependency>
   		</Installer>
   		<Installer version="1.01" os="Linux" Type="tar.gz">
   			<AllowUpdate>True</AllowUpdate>
   			<MinUpdateFromVersion>1.00</MinUpdateFromVersion>
   			<ConfigureScript>./configure</ConfigureScript>
   			<Dependency type="Package" required="True" needPreInstall="True"  openDownloadDefinition="http://example.com/example.xml" packagename="nmap">nmap</Dependency>
   			<!--依赖的 Linux 软件包。packagename 会被代入软件包管理器的安装参数(如 apt install)中。-->
   			<Dependency type="Extension" required="False" needPreInstall="False" openDownloadDefinition="http://example.com/example2.xml">Kill Your Father's Computer Too</Dependency>
   		</Installer>
   		<Source os="Linux" source="deb http://mirror.nus.edu.sg/raspbian/raspbian wheezy main contrib non-free rpi"/><!--Linux 软件源定义-->
   		<Source os="iOS" source="https://itunes.apple.com/cn/app/example/idXXXXXXXXX?mt=8"/><!--App Store 地址-->
   		<Source os="Android" source="https://play.google.com/store/apps/details?id=com.ohmygod.mysw" packagename="com.ohmygod.mysw" /><!--Google Play 地址和 apk 软件包名-->
   </Download>

 </OpenDownloadDescription>

发布于2013-08-30 01:34
编辑于2013-08-30 01:34

文章被以下专栏收录