做wince或是mobile开发,最终的文件会打包成一个cab包,当别人卸载我们的软件然后进行重装后,我们是希望最好连程序生成的配置文件也一并删除,否则重新安装的话会使用到以前的配置文件,有时这是我们不愿看到并且必须要处理的。
本文介绍的方法是如何利用系统本身的机制,通过一个动态库setup.dll以实现在卸载时删除安装目录中所有文件的功能。
首先需要生成一个setup.dll,此动态库中应包含这样的函数
codeUNINSTALL_INIT
Uninstall_Init(
HWND hwndParent,
LPCTSTR pszInstallDir
)
用以在卸载时进行文件删除的工作。
另外还有一个函数,也是在卸载之后可调用的,但由于参数中并没有带上路径,因此暂时未用,函数原型如下:
codeUNINSTALL_EXIT
Uninstall_Exit(
HWND hwndParent
)
好,首先需要实现一个DeleteDir的函数,然后用Uninstall_Init调用DeleteDir即可。
代码如下:
BOOL DeleteDir(TCHAR * path)
{
WIN32_FIND_DATA finddata;
HANDLE hfind;
TCHAR * pdir;
pdir=new TCHAR[_tcslen(path)+5];
_tcscpy(pdir,path);
if(path[_tcslen(path)-1] != TCHAR('\\'))
_tcscat(pdir, _T("\\*.*"));
else
_tcscat(pdir, _T("*.*"));
hfind=FindFirstFile(pdir,&finddata);
if(hfind==INVALID_HANDLE_VALUE)
return FALSE;
delete []pdir;
do
{
pdir=new TCHAR[_tcslen(path)+_tcslen(finddata.cFileName)+2];
_stprintf(pdir,_T("%s\\%s"),path,finddata.cFileName);
if(_tcscmp(finddata.cFileName,_T(".")) == 0 || _tcscmp(finddata.cFileName,_T("..")) == 0 )
{
delete []pdir;
continue;
}
if((finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)==0)
DeleteFile(pdir);
else
DeleteDir(pdir);
delete []pdir;
}while(FindNextFile(hfind,&finddata));
if(RemoveDirectory(path))
return TRUE;
else
return FALSE;
}
codeUNINSTALL_INIT
Uninstall_Init(
HWND hwndParent,
LPCTSTR pszInstallDir
)
{
UnregisterTodayItem(hwndParent, pszInstallDir);
DeleteDir((TCHAR*)pszInstallDir);
return codeUNINSTALL_INIT_CONTINUE;
}
本文介绍如何在卸载软件时删除所有配置文件,防止重装后使用旧配置。通过创建setup.dll并在其中定义函数来实现卸载时清理安装目录。
3566

被折叠的 条评论
为什么被折叠?



