创建安装程序的两种方法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

创建安装程序的两种方法

创建安装程序是程序员经常遇到的问题之一。本文仅探讨在Windows 平台上创建安装(Setup)程序的两种方法。

一、使用Visual C++ 编程生成Setup 程序

生成Setup 程序最直接的方法当然是通过编程来实现。

对于Windows 平台来说,没有比Visual C++ 更好的开发工具了(

原因很简单,有谁能比Microsoft 更了解Windows 平台呢?)。下面的例程就是使用Visual C++ 5.0 编译完成的。

Setup 程序主要处理两个方面的问题:

(1)用户界面。评价一个Setup 程序的优劣时,用户界面是否美观是其中的一个重要因素。此外,通过交互式界面还应能够获得用户的相关信息(比如目标目录)。

(2)文件拷贝与程序组的生成。也就是按照用户输入的信息,生成相应的目录并完成文件拷贝功能(这要涉及到解压缩问题)。一般来说,还应包括将可执行文件的图标添加到指定的程序组中。

1、为Setup 程序设置背景

Setup 程序的用户界面以对话框为主,不过若有美丽

背景则能为你的程序增色不少。你可以选择一个合适的BMP 文件,将它插入到工程文件(project)中,并通过重载主窗口类的OnPaint() 函数显示出来。值得注意的是,背景图片不应过于眩目,否则会有喧宾夺主之感。例如,要加入的BMP 文件的ID 号是IDB_BIT。下面给出应加在OnPaint() 中的

函数。

void Background(CDC *pDC)

{ CDC * pmem;

CBitmap * pback;

CBitmap * pold;

BITMAP ff;

pmem=new CDC;

pbit=new CBitmap;

pbit->LoadBitmap(IDB_BIT);

pmem->CreateCompatibleDC(pDC);

pold=(CBitmap *) pmem->SelectObject(pbit);

pbit->GetObject(sizeof(ff),&ff);

pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,pmem,0,0, MERGECOPY );

delete pmem->SelectObject(pold);

delete pmem;

return;

}

2、显示全屏效果

一般的主窗口都有边界(border),如果你更欣赏DOS 界面中的全屏效果,则最好在重载CWnd::

PreCreateWindow(CREATESTRUCT&cs) 时保持cs.style 的缺省值,并且在创建主窗口时使用CreateEx(WS_EX_TO

PMOST,AfxRegisterWndClass(CS_VREDRAW),

NULL,WS_VISIBLE|WS_POPUP,0,0,(GetSystemMetrics

(SM_CXSCREEN)),(GetSystemMetrics(SM_CYSCREEN)), HWND_DESKTOP,0);。

3、保存公用参量

通过对话框,可与使用者交换信息。那么,如何将程序运行时必需的参量(比如说安装目录)保存起来呢?当然,可以生成一个配置文件,不过更为专业的作法是将相关信息存入到系统的INI 文件中。如果开发平台是Windows 95,则一切都将变得很简单,因为你面对的就是win.ini 文件,该文件在Windows 目录下。Visual C++ 提供了如下的一组函数来操作该文件。

(1)CWinApp::GetProfileString

CString GetProfileString( LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszDefault = NULL );

用来读取lpszSection 区域内的lpszEntry 参数,其缺省值为lpszDefault。

(2)CWinApp::WriteProfileString

BOOL WriteProfileString( LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszValue );

用来写入lpszSection 区域内的lpszEntry 参数,其值为lpszValue。

如果你的开发平台是Winnt,则要麻烦一点。假如你的变量保存在e:\\winnt\sdi.ini 中,则在使用以上函数之前必须调用:

free((void*)m_pszProfileName);

m_pszProfileName=_tcsdup(_T("e:\\winnt\\sdi.ini"));

如果要存取的变量并不多,则也可将它们保存在注册关键字(registry key)中。假如你的变量保存在Moon 注册关键字(一般是你公司的名字)下,则在使用以上函数之前必须调用:

free((void*)m_pszRegistryKey);

m_pszRegistryKey=_tcsdup(_T("HKEY_CURRENT_

USER\\Software\\moon"));

4、文件的拷贝与解压缩

如果你的安装程序是针对软盘的,则存储空间就成了必须考虑的问题。原封不动地把应用程序拷贝上去未免太傻了,较为合适的方法是将应用程序压缩在软盘中,安装时再解压缩到相应的目标目录中。Visual C++ 提供了一套以LZ 开头的函数,用来操作用Compress 命令压缩的文件

:你可以用LzOpenFile() 打开原文件和目标文件,然后用LzCopy() 解压缩拷贝。该组函数调用Windows 系统的lzexpand.dll

动态链接库,所以编译链接时一定要注意加入头文件lzexpand.h,并插入接口库lz32.lib。

还有个更为简单的办法,即先用像arj.exe 这类的共享

压缩程序压缩原程序,然后调用system("arj ...") 来完成解压缩,整个解压缩过程在后台进行,用户不会知道你到底用的是什么方法。

5、显示拷贝进度

相关文档
最新文档