首页 新闻 会员 周边

卸载后自动安装

0
悬赏园豆:60 [待解决问题]

我应该如何写脚本,让安装程序探测到之前如果已经安装过这个程序的时候自动删除前一版本的程序,然后开始安装这个版本的程序。 

我目前的安装程序在删除前边那次的程序后就中止了。然后还要在点击运行才能开始安装。

问题补充:

1:我想在OnShowUI中利用OnUnInstall事件删除前一版本。

2:但如何自动重新启动新版本的安装安装呢。在OnUnistall后在OnShowUI中直接调用 ONBEGIN/OnFirstUIBefore 等事件则提示:有另一个进程正在执行,请退出。不能自动重新启动安装程序。

一些是我的部分代码。请指正

function OnShowUI()
BOOL bMaintenanceMode, bUpdateMode;
string szIgnore, szTitle,szMsg;

begin


//bUnInstalled =TRUE;
//szTitle =sz1+gszVersionNo+sz2;
//Welcome ( szTitle, 0 );
//bKl_AllReInstalled =FALSE;
//flag_ReBegin:

// Enable dialog caching
Enable( DIALOGCACHE );

// Determine what events to show.
bUpdateMode = FALSE;
bMaintenanceMode = FALSE;

// Remove this to disabled update mode.
if( UPDATEMODE ) then
bUpdateMode = TRUE;
endif;
// Remove this to disable maintenance mode.
if ( MAINTENANCE ) then
bMaintenanceMode = TRUE;
endif;
// Show appropriate UI
// TODO: Enable if you want to enable background etc.
//if ( LoadStringFromStringTable( "TITLE_MAIN", szTitle ) < ISERR_SUCCESS ) then // Load the title string.
// szTitle = IFX_SETUP_TITLE;
//endif;
//SetTitle( szTitle, 24, WHITE );
//Enable( FULLWINDOWMODE );
//Enable( BACKGROUND );
//SetColor( BACKGROUND, RGB( 0, 128, 128 ) );
if( bUpdateMode ) then
OnUpdateUIBefore();
else
if ( bMaintenanceMode ) then
if(ReferenceFileIsUsing()<0)then
return -1;

endif;

szMsg = @IDS_UNINSTALLMESG; //ryy modify 0904
if(MessageBox( szMsg, MB_YESNO )==IDYES) then
//调用卸载程序
OnUninstall();

abort;
else
return -1;
endif;

else
OnFirstUIBefore();
endif;
endif;
//注册卸载键键值
ProcessBeforeDataMove();
// Move Data
OnMoveData();

//指定判别是否可以卸载文件
ProcessAfterDataMove();
//注册控件
SetupRegistry();

if( bUpdateMode ) then
OnUpdateUIAfter();
else
if ( bMaintenanceMode ) then
OnMaintUIAfter();
else
OnFirstUIAfter();
endif;
endif;

//if(bKl_AllReInstalled) then
//AllReInstalled();
//endif;
DestroyInstallFeatrueList();
// Disable dialog caching
Disable(DIALOGCACHE);
end;

keleman的主页 keleman | 菜鸟二级 | 园豆:265
提问于:2011-10-27 15:24
< >
分享
所有回答(2)
0

如果可以找到之前的安装目录,删除里面文件是不是就可以了,有注册表其他信息吗。

MySparrow | 园豆:263 (菜鸟二级) | 2011-10-27 16:34
0

这种问题应该是属于自动升级的问题,你查一下程序自动升级,应该有很多内容。

一般的方法是:创建一个外壳程序,由外壳程序启动实际用的程序,在启动之前,先判断是否需要升级,如果需要则下载升级文件升级,也就是覆盖一些老文件,然后再启动。

如果是安装程序的时候想覆盖原程序,就需要查注册表了,你应该在程序安装的时候向注册表中写一些数据。

如果使用的是.net,可以使用ClickOnce技术,支持自动升级,它可以自动抛弃原来的程序。

kent06 | 园豆:207 (菜鸟二级) | 2011-10-28 10:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册