Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88941
  • 博文数量: 20
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 200
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 10:49
文章分类

全部博文(20)

文章存档

2009年(2)

2008年(18)

我的朋友
最近访客

分类: WINDOWS

2008-10-28 21:12:13

例子路径:D:\Program Files\Windows Mobile 6 SDK\Samples\Common\CPP\Win32\SetupDLL
在WinCE的安装工程(cab包)底下可以配置一个Setup.dll,这个东西在安装过程中被加载,并控制安装过程。
SetupDll.dll很简单里面只有四个函数:
 
SETUP_API codeINSTALL_INIT Install_Init(
HWND hwndParent,
BOOL fFirstCall,
BOOL fPreviouslyInstalled,
LPCTSTR pszInstallDir
)
SETUP_API codeINSTALL_EXIT Install_Exit(
HWND hwndParent,
LPCTSTR pszInstallDir,
WORD cFailedDirs,
WORD cFailedFiles,
WORD cFailedRegKeys,
WORD cFailedRegVals,
WORD cFailedShortcuts
)
SETUP_API codeUNINSTALL_INIT Uninstall_Init(
HWND hwndParent,
LPCTSTR pszInstallDir
)
SETUP_API codeUNINSTALL_EXIT Uninstall_Exit(
HWND hwndParent
)

基本的操作是这样:
在用户选择安装路径后,先执行Install_Init,在安装完成后,执行Install_Exit。
卸载时,先执行Uninstall_Init,在卸载完毕后执行Uninstall_Exit。
这里讨论一下,在安装过程中,遇到可能的情况以及传入函数的参数。
在第一次安装的时候,Install_Init会在用户选择安装路径后执行。
传入Install_Init的参数:
pszInstallDir为:用户刚选择的路径\Program Files\工程名
fFirstCall为TRUE
fPreviouslyInstall为FALSE
安装完成后,执行Install_Exit。
pszInstallDir为:用户选择的路径\Program Files\工程名
卸载时,Uninstall_Init被执行。
参数pszInstallDir为:用户安装时选择的路径\Program Files\工程名
之后执行Uninstall_Exit。
另一种情况,在用户用新的CAB对已有工程进行更新时:
系统先挂载新的CAB中的SetupDll.dll
进入新SetupDll.dll的Install_Init,传入的参数为:
pszInstallDir为:用户上次安装的路径\Program Files\工程名
fFirstCall为TRUE
fPreviouslyInstall为FALSE
之后会弹出询问用户是否卸载上次安装的对话框,如果选择“取消”则程序退出不会执行其他函数。
如果选择“确定”,则会挂载旧版本中的SetupDll.dll,进入Uninstall_Init,传入参数为:pszInstallDir为:用户上次安装的路径\Program Files\工程名
之后执行旧版本的Uninstall_Exit。
在卸载旧版本完毕后,又会出现让用户选择路径的界面:
之后又进入新版本的Install_Init,此时参数变为:
pszInstallDir为:用户新选择的路径\Program Files\工程名
fFirstCall为FALSE
fPreviouslyInstall为FALSE
安装完成后,执行Install_Exit。
pszInstallDir为:用户新选择的路径\Program Files\工程名
另外,在安装过程中,还可以通过注册表,进行新旧setupdll的交互。这种方法比较灵活,怎么方便怎么来吧\^o^/
 
阅读(1133) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~