卸载操作
安装的过程中我在OnAfterFirstUI中做了一些操作:
拷贝文件,注册Filter,安装驱动,创建卸载快捷方式
那么我在卸载的时候也要做反向的对应操作:
删除卸载快捷方式,卸载虚拟驱动,反注册Filter,删除文件。
知道安装时候句柄函数调用顺序:
OnFirstUIBefort ----> OnMoveData -----> OnFirstUIAfter;
Maintance时候调用顺序:
OnMaintUIBefort ----> OnMoveData ----> OnMaintUIAfter
安装时候自己控制的操作多数在UIAfter后面做,卸载的时候有些操作必须在OnMoveData前面做。即删除拷贝的文件前面做。
那么我们在OnMaintUIBefore里面卸载虚拟驱动,反注册Filter,因为这些还依赖于安装路径里面的一些文件。
function OnMaintUIBefore() number nResult, nType, nMediaFlags; string szTitle, szMsg, szIgnore; STRING szCommandLine, szSourceFilePath, szTargetFilePath, szPath; begin .................................................. / Show Uninstall Confirmation Dialog if ( nType = REMOVEALL ) then nResult = MessageBox( SdLoadString( IFX_MAINTUI_MSG ), MB_YESNO ); if (nResult != IDYES ) then / // unregister the filter szPath = TARGETDIR; szSourceFilePath = "regsvr32.exe"; szTargetFilePath = szPath ^ "AZImageProcess.ax"; SetFileInfo(szTargetFilePath,FILE_ATTRIBUTE,FILE_ATTR_NORMAL,""); ChangeDirectory(szPath); LongPathToShortPath ( szTargetFilePath ); szCommandLine = "/u"+szTargetFilePath; LaunchAppAndWait ( szSourceFilePath , szCommandLine , WAIT ); Delay(1); / . ........................................................................... Dlg_ObjDialogs: nResult = ShowObjWizardPages( nResult ); if ( ( nResult = BACK ) && ( nType != MODIFY ) ) goto Dlg_Start; if ( ( nResult = BACK ) && ( nType = MODIFY ) ) goto Dlg_SdFeatureTree; switch(nType) case REMOVEALL: // uninstall virtual driver szPath = TARGETDIR^ "Virtual Cam Driver"; szSourceFilePath = szPath^ "VDrvInst.exe"; szTargetFilePath = szPath^ "ECamVideo.inf"; LongPathToShortPath ( szSourceFilePath ); LongPathToShortPath ( szTargetFilePath ); szCommandLine = "/u"; LaunchAppAndWait ( szSourceFilePath , szCommandLine , WAIT ); Delay(5); //
...........................................................................
end;
上面代码中位于/之间的是我自己修改的,其他是自动生成的代码。
卸载的操作要加载到正确的地方。
OnMaintUIAfter函数里面的操作:删除一些已经存在的目录文件
删除Startmenu里面的Azurewave Folder,需要自己删除的理由:因为自己写代码添加了Uninstall 快捷方式,如果不用代码删除那么这个Uninstall方式在卸载完后,还存在于StartMenu目录里面。
/ // remove all the copy files // Delete the install files szTargetPath = PROGRAMFILES ^ COMPANY_NAME; DeleteDir(szTargetPath, ALLCONTENTS); //
删除安装路径路径和文件,自己写代码删除可以删除的更干净,保护没有自动删除干净的措施。
/// // delete the shortcut in the start menu/programes szTargetPath = FOLDER_PROGRAMS ^ COMPANY_NAME; DeleteDir(szTargetPath, ALLCONTENTS); ///
这样自己控制的卸载操作就完成了。