installscript类型 完成时实现推荐安装其他产品的功能

时间:2024-08-02 19:36:32

目前好多软件在安装完成时都有什么 立刻运行、打开网址、推荐安装其他工具等功能

我司领导也追时髦要求了这个功能而且要推荐多个,所以这个功能实现起来就需要自己去写代码了。陆陆续续研究了研究了好长时间,由于不是专业做安装包的,提出个功能就要研究好久,提出个小问题还要查资料改半天呢,更别说这么大个功能呢。终于今天搞定了,来发个博。希望对用的到的提供帮助,节约点时间。

推荐安装的工具不超过2个可以 调用SdFinish dialog很容易就实现了(一定注意只能推荐2个),代码如下

    bOpt1   = TRUE;
    bOpt2   = TRUE;
    szOpt1 = "安装xxxx工具1";
    szOpt2 = "安装xxxx工具2"; 

    if ( BATCH_INSTALL ) then
    	SdFinishReboot ( szTitle , szMsg1 , SYS_BOOTMACHINE , szMsg2 , 0 );
    else
	SdFinish ( szTitle , szMsg1 , szMsg2 , szOpt1 , szOpt2 , bOpt1 , bOpt2 );
    endif; 

    if (bOpt1) then
        LaunchApp (SUPPORTDIR ^ "setup1.exe","");
    endif;

    if (bOpt2) then
        LaunchApp (SUPPORTDIR ^ "setup2.exe","");
    endif;

实现超过3个上面的代码就无法做了,我曾修改过 SdFinish这个dialog的自带代码,但是给改乱套了,呵呵,改了好久啊,就是搞不定。后来看到有 AskOptions对画框,我就在想完成的时候调用这个dialog为完成,就把dialog改成下图这样了

installscript类型 完成时实现推荐安装其他产品的功能

可是调试的时候他还是原来的样子,并不是我改成这样就这样了。那就得修改它的代码了。在 installscript中调出自带代码

installscript类型 完成时实现推荐安装其他产品的功能

这个dialog有3个按钮。如何将“上一步”“取消”这2按钮给去掉,再将“下一步”按钮的text给改成“完成”就要去 AskOptions 写代码来完成了,只在dialog中改文本,删按钮不管用。运行时代码又会将这个dialog给初始化成开始状态,所以只能去修改代码,找对路改起来也很简单。

找到要隐藏的两个按钮的ID,应该一个是 9,12,下一步的ID应该是1

获取到当前dialog的句柄

hDlg = CmdGetHwndDlg(DLG_ASKOPTIONS);

就在这句下面写下面的代码(隐藏 上一步、取消按钮,修改 下一步 的text叫 完成)

    hItem = CtrlGetDlgItem("", hDlg, 9);
            ShowWindow(hItem, SW_HIDE);
            hItem = CtrlGetDlgItem("", hDlg, 12);
            ShowWindow(hItem, SW_HIDE);

    SetWindowText(CtrlGetDlgItem("", hDlg, 1),"完成");

即三个按钮修改完了。

OnFirstUIAfter()如何调用就很简单了

推荐安装、打开网址、运行软件等各个操作都可以做了

begin
Dlg_AskOptions:

    szMsg = "推荐:";
    szText1 = " 运行 XXXX
    szText2 = " 打开 XXX网址";
    szText3 = " 安装 工具1";
    szText4 = " 安装 工具2";
    szText5 = " 安装 工具3"; 

    nvCheck1 = TRUE;
    nvCheck2 = TRUE;
    nvCheck3 = TRUE;
    nvCheck4 = FALSE;
    nvCheck5 = FALSE; 

    // Display the check box (NONEXCLUSIVE) dialog. 

    nValue = NONEXCLUSIVE; 

    nReturn=AskOptions (nValue, szMsg,
               szText1, nvCheck1,
               szText2, nvCheck2,
               szText3, nvCheck3,
               szText4, nvCheck4,
               szText5, nvCheck5
             );
  if (nReturn==NEXT) then
	if (nvCheck1) then
	 	LaunchApp(TARGETDIR ^ "XXX.exe","");
	endif;
	if (nvCheck2) then
		LaunchApplication("http://www.taobao.com", "", "", SW_NORMAL, INFINITE, LAAW_OPTION_WAIT | LAAW_OPTION_USE_SHELLEXECUTE );
	endif;
	if (nvCheck3) then
		LaunchApp(SUPPORTDIR ^ "Setup.exe","");
	endif;
  endif;

	Disable(STATUSEX);

end;