function void SetupSuccess()
    STRING szTitle;
    STRING   szMsg1, szMsg2,szOpt1,szOpt2;
    BOOL     bvOpt1, bvOpt2;
    STRING szApplicationPath,szApplicationCmdLine,szCmdLine;
begin      
   // if (MAINTENANCE) then return 0;endif;//如果不是安装状态,比如修改/卸载状态的时候,则不执行。
   if REMOVEALLMODE = 0 then
    szTitle = "Install success ";//对话框的标题
    szMsg1  = "%P Install success.\n" +
              "Please choice:";//%P为软件名称

    szMsg2  = "click 'finish'";
    szOpt1 = "Read readme file ";//如果这里为空,则表示只有一个选项
    szOpt2 = "Run application";
    SdFinish (szTitle, szMsg1, szMsg2, szOpt1, szOpt2, bvOpt1, bvOpt2);
    if (bvOpt1) then
        LaunchApp ('notepad.exe',INSTALLDIR ^ "\\readme.txt");//LaunchApp 用来运行某外部程序
    endif;
  
    if (bvOpt2) then
           LaunchApp ("explorer.exe","http://localhost/AlohaWebClient");
    endif;   
    endif;
end;如何处理呢?搜索了下没结果的.
我是想在安装成功后让用户选择"readme文件" 但不是在onmoved 的时候执行.

解决方案 »

  1.   

    export prototype SetupSuccess();   增加它
      

  2.   

    因为onmoved 是在拷贝文件完毕后执行的.我是想在安装成功(拷贝完后要进行注册等等.)后显示一个对话框,用户可以选择查看readme.txt 也可以运行程序.
    现在我运行安装的时候总不能安装成功,估计是SetupSuccess的问题.把void去掉了也不行的.
    怎么会这样?
      

  3.   

    我不是太能理解你添加function void SetupSuccess()的用意,如果是自定义function的话,不应该添加void,因为默认的返回值类型一般都是NUMBER。OnMoved 是在拷贝文件完毕后执行的没错,所以你可以考虑把注册等写在该函数里面,通过不同的Dialog让用户逐一操作,并判断该操作是否成功。(就像OnFirstUIBefore那样),最后才是显示选择查看readme.txt的Dialog。
      

  4.   

    非常感谢 misvcom(零下一度)
    -------------是我没说明白,我要实现的功能是在安装成功后,显示一个页面,该页面上有两个复选框(1)查看readme(2)运行程序.以前我看的你的一个代码例子是写在OnMoved里的.但是我不想写在里面,而是想写在安装程序正确安装后.
    我把void去掉了,安装的时候只是说安装被中断,我不知道哪里的问题.  你帮我找找OK?
      

  5.   

    或者说我应该写在哪个方法里.才能在安装的最后一步显示那个界面(显示两个复选框的界面) LogWriteCustomString 写进哪个文件的,我还没找到,你帮我找下好不?谢谢.
      

  6.   

    你可以把代码移到OnFirstUIAfter里面试下installshield 本身带有调试功能的啊,在调试那里也找不到出错的地方吗?
      

  7.   

    OnFirstUIAfter测试过了也不行的.安装的时候好象没有去运行它。但是安装成功了。function OnFirstUIAfter() 
    begin   
     MessageBox ("OnFirstUIBefore", INFORMATION);  
    end;
      

  8.   

    下面是一个OnFirstUIAfter示例,至于为什么你那里没有执行,我一时间也没有想到为什么>_<//////////////////////////////////////////////////////////////////////////////
    //
    // 函数: OnFirstUIAfter
    //
    // 事件: FirstUIAfter event is sent after file transfer, when installation 
    // is run for the first time on given machine. In this event handler 
    // installation usually displays UI that will inform end user that
    // installation has been completed successfully.
    //
    ///////////////////////////////////////////////////////////////////////////////
    function OnFirstUIAfter()
    STRING szTitle,szMsg1, szMsg2, szOption1, szOption2,szCmdLine;
    NUMBER bOpt1, bOpt2;begin
    //set_vod_liveaddress();szCmdLine = SUPPORTDIR ^"SCE10CHS.EXE";
    if (LaunchAppAndWait(szCmdLine, " /q",WAIT) < 0) then
     MessageBox ("不能安装解码程序,请联系供应商.",SEVERE);
    endif;Disable(STATUSEX);
    bOpt1 = FALSE;
    bOpt2 = FALSE;
    szMsg1 = SdLoadString(IFX_SDFINISH_MSG1);
    szMsg2 = "请浏览本主机WEB服务器上的 "+@PRODUCT_NAME+" 虚拟目录 例: http://Localhost/";
    szOption1 = "";
    szOption2 = "";
    szTitle = @PRODUCT_NAME+"安装完成";
    SdFinishEx(szTitle,szMsg1,szMsg2,szOption1,szOption2,bOpt1,bOpt2);szCmdLine = "http://LocalHost";
    //if (LaunchApp(PROGRAMFILES ^"Internet Explorer"^"IEXPLORE.EXE", szCmdLine) < 0) then
    //MessageBox ("不能打开浏览器.",SEVERE);
    //endif;return 0;
    end;