使用Python实现跨Windows和Unix平台安装程序的方法

我们在使用类 Unix 系统时,经常会用到一些以“.bin”或者“.run”结尾的安装程序 (Installer)。(为描述方便,这里我们使用“Bin 安装程序”来泛指这种安装程序。)Bin 安装程序不依赖于系统发行版自己的包 (package) 管理器来实现应用程序的安装和卸载,而是完全自己控制安装的整个过程,程序卸载的时候需要用户执行应用程序安装目录下的卸载脚本来完成。

Bin 安装程序最大的好处就是可以运行在多种类 Unix 平台,以及基于相同核心的多个发行版上,而不需要关心">系统使用何种包管理器。在一定程度上实现了跨平台。

但是,非常遗憾的是,这种安装程序不能用在 Windows 平台上。Windows 平台上的安装程序需要特别的制作。这个是由 Bin 安装程序本身使用类 Unix 平台通用的 Shell 脚本来实现整个安装过程的引导和控制造成的。

好消息是,现在11545.html">我们有了一种强大的,可以同时运行在类 Unix 平台和 Windows 平台的脚本 -Python。随着 Python 的普及,越来越多的系统整合开始基于 Python 来完成,使得现在很大一部分类 Unix 平台都默认部署了 Python 的运行环境。即使没有默认安装,用户在安装其它应用的时候可能也都安装了 Python。

所以,我们能不能使用 Python 来实现一个可以在类 Unix 平台和 Windows 平台都通用的安装程序呢?这个安装程序又如何来实现呢?本文将和大家探讨这个问题,并提供一个解决这个问题的思路。本文抛开被安装程序的跨平台能力,仅讨论安装程序本身的跨平台特性和实现方法。

本文首先分析了 Bin 安装程序的结构和工作原理 , 然后介绍如何应用 Python 实现类似功能 , 并对 Python 实现的局限性以及可能的解决方案进行了探讨。

Bin 安装程序的执行过程

Bin 安装程序在运行的最初阶段会提供一些向导界面 , 向用户提供关于被安装产品的相关信息 , 并引导用户输入安装程序需要的配置信息 . 安装程序获取了需要的配置信息后 , 进入具体的安装阶段。

在安装阶段 , Bin 安装程序首先展开一些包,这些包中包含一些安装程序自身所依赖的库和安装程序的配置信息,以及将要安装的用户应用程序。

事实上,这些包被展开的过程分为两个阶段。在第一个阶段,安装程序将这些包的压缩文件从安装程序自身中分离出来,生成单独的压缩文件。然后在第二阶段,使用解压缩工具将这些压缩文件解压,并设置需要的系统环境变量。最基本的是 PATH 和 JAVA_HOME 这两个变量。

在这之后,安装程序读取安装配置,取得用户自定义的安装脚本(pre-install, post-install),按照既定的顺序执行它们。

最后,安装程序将安装过程中记录下来的被安装的文件列表和卸载程序模板,以及用户自定义的卸载脚本(pre-uninstall, post-uninstall)合并,生成卸载程序,并放入用户应用程序的安装目录。

Bin 安装程序的实现分析

那么,Bin 安装程序是如何实现这整个过程的控制的,安装程序文件本身又是一个什么样的结构呢?我们接下来进行分析。

Bin 安装程序本身其实是一个包含二进制数据的 Shell 脚本。简单的安装程序可以由一段脚本代码加上一个压缩包的二进制数据构成。复杂的可能会包含多段二进制数据。

文件的基本结构如下图

图示 1:Bin 文件结构示意图

知道了文件结构之后,我们就要看看安装程序是怎么将自身文件内部的二进制数据分离出来了。其实这个有很多种方法实现。最基本的方法可以使用 tail 命令,或者使用 sed 命令。复杂些的可以使用读取文件的方法。

时间: 2025-01-20 12:13:54

使用Python实现跨Windows和Unix平台安装程序的方法的相关文章

甲骨文推出新版面向Windows系统的MySQL安装程序

为进一步提升在 Windows 系统上的MySQL功能,甲骨文日前宣布推出新版面向Windows系统的MySQL安装程序(MySQL Installer for Windows).通过帮助MySQL用户http://www.aliyun.com/zixun/aggregation/32995.html">在Windows平台上简化安装流程,新版面向Windows系统的MySQL安装程序将能显著地减少安装时间. 为进一步支持Windows用户,甲骨文已完成了针对Windows Server

教你如何在Linux/Unix平台安装MySQL

mysql|unix [导读]介绍如何在Linux/Unix平台下安装MySQL. Linux下的安装步骤: 推荐使用RPM工具来进行Linux下的MySQL数据库安装.目前的MySQL rpm安装文件包是在SuSE Linux 7.3系统平台上打造而成的,但是在绝大多数支持RPM和glibc的其他Linux平台中也可以进行安装.如果选择通用的RPM安装包,那么RPM将静态链接到Linux的线程中.下面步骤执行了一个标准的最小化安装: shell> rpm -i MySQL-server-VER

BitRock Cross Platform Installer 7.2.4发布 多平台安装程序软件

BitRock InstallBuilder是一个允许你创建易于使用的多平台的安装程序,支持操作平台:Linux(x86/PPC/s390/x86_64/Itanium),Windows,Mac OS X,FreeBSD,OpenBSD,Solaris(x86/Sparc),IRIX,AIX,和HP- UX应用程序.生成的安装程序运行界面跟所在系统的程序界面外观一致,无需依赖其他第三方的应用程序,而且可以在http://www.aliyun.com/zixun/aggregation/18378

Windows 7开发:安装程序检测

目标 在这个试验中,您将学习到如何 : • 在 Windows Vista 以 及更新的版本中,确定关于安装侦测的问题. • 修复安装侦测问题 系统要求 您必须拥有下面的环境以完成这个 实验 : • Microsoft Visual Studio 2008 SP1 • Microsoft Windows 7 练习 1: 安装侦测问题 在这个联系中,您将看到一个"早期版本的" 可执行文件被错误的当成一个安装程序,而事实上它是一个正常的应用程序且不需要以管理 员权限来运行. 任务 1 –

windows系统安装报错“安装程序无法定位现有系统分区,也无法创建新的系统分区”

知识点分析: 在安装windows系统过程中经常出现在选择安装分区界面提示"安装程序无法定位现有系统分区,也无法创建新的系统分区"的现象,有时通过将现有分区全部删除,重新分区可以解决.有些情况下(如加装SSD.新硬盘等)重新分区也不能解决. 此次遇到的用户磁盘有重要数据,不能将全盘分区删除重新分区.通过PE引导进入,在PE下安装系统出现重启后不能引导,发现现有磁盘没有活动分区: 将要安装系统的分区设置为活动分区,再在PE下或直接引导方式安装系统均可正常安装,如下图所示: 之后遇到几例类

SQLite3源码在Windows及WinCE平台下的编译方法

好久没有写博客了,最近有时间又开始写点东西. 最近,刚好需要用到SQLite3数据库,就自己研究了一下,这个的确是个好东西,开源的东西都还不错. 好了,言归正传.相信不少人在用SQLite3源码编译的时候还是费了不少劲的,网上找来的东西都讲的不是很完整. 下面,我就将自己的编译方法写了出来. 首先从SQLite官方网站http://www.sqlite.org/download.html 下载最新的源代码,目前最新的版本是V3.7.11(2012年3月25日星期日). 需要下载在源码如下: sq

Windows 7中如何安装程序?

添加程序的方式取决于该程序安装文件所在位置.通常通过 CD/DVD .Internet 或网络安装程序. 将光盘插入计算机,然后按照屏幕上的说明进行操作. 在网络浏览器中,单击指向该程序的链接.执行下列操作之一: 1. 若要立即安装程序,请单击"打开"或"运行",然后按照屏幕上的说明进行操作. 2. 若要以后安装程序,请单击"保存",将安装文件下载到计算机.准备安装程序时,请双击该文件,然后按照屏幕上的说明进行操作.  通过网络安装程序的步骤:

从windows 发现unix下文件(夹)变化

问题描述 有个问题想请教各位一下.现在有A.B两个服务器,A运行的是windows,B运行的是Unix.现在我想设计一个在A上运行的程序(最好是C#程序),它可以实时监控B上文件夹及文件夹下文件的变化(如:新增一个文件.删除了一个文件.对其中的文件进行了修改等).各位是否有解决方法?谢谢! 解决方案 解决方案二:你觉得现实么?windows和unix文件结构都不一样,unix不安装程序给你暴露出端口,你根本访问不了.解决方案三:即使两台电脑都是windows,你觉得能从一台电脑直接监视另一台电脑

windows 系统中wordpress安装配置图文教程

一 wordpress安装 我用的是XAMPP(Apache+MySql+PHP),wordpress(BLOG程序)3.5.1 简体中文官方安装版 ,下面来说说Windows下用XAMPP安装wordpress的方法. 安装XAMPP就是傻瓜式的next.next.安装完成之后运行Control Panel,启动Apache和Mysql,如下图 选择Mysql后面的Admin进入数据库管理界面 ,如下图 我们先建立数据库,随便命名,这个数据库作为wordpress安装时要用到的数据库. 下载w