zoukankan      html  css  js  c++  java
  • InstallShield 工程类型MSI 使用过程中碰到的问题及解决方法。

    一、安装完 桌面创建IE快捷方式:

      1、  install script可以直接建internet快捷方式。

      2、  basic msi 要先在desktop随便创建一个快捷方式, 修改Target和Arguments两项。将Target 的内容改为[ProgramFilesFolder]Internet ExplorerIEXPLORE.EXE,即将快捷方式指向IE,然后将Arguments修改为网址(必须有http://):http://tools.taokuaiche.com

    二、现在流行安装完程序打开网址: 只需在OnEnd中加一行命令:

      (使用默认浏览器打开)

      1、LaunchApplication("http://tools.taokuaichen.com", "", "", SW_NORMAL, INFINITE, LAAW_OPTION_WAIT | LAAW_OPTION_USE_SHELLEXECUTE );

      (使用IE浏览器打开)

      2、LaunchAppAndWait(WINDIR ^ "explorer.exe","http://tools.taokuaichen.com", LAAW_OPTION_WAIT);

    三、覆盖安装:每次运行setup.exe时不提示卸载,仍执行安装:

      开始修改了卸载逻辑,强制进行每次安装,导致程序安装后无法卸载的死循环。 开始菜单及添加/删除的卸载也是安装,后来在网上找了下资料试了下真管用。操作如下:

      Basic MSI工程删除behaviorandLogic->custom actions and Sequences-> Sequencse->installation-> Execute中的RegisterProduct和PublishProduct即可。

      注:如果碰到文件有更新不了的现象让你们的开发人员对 升级文件的版本号修改为高一点的即可。

    四、现在好多安装程序在安装完成后都有推荐安装其他工具,安装完成去调用另一个setup安装另外的程序

      推荐安装的工具不超过2个可以通过以下方法实现(超过2个则需要自定用界面了):

      1、将另一个setup.exe加入到 support files—language independent中。(此处的调用路径为SUPPORTDIR)

      2、在OnFrstUIAfter中 调用LaunchApp (SUPPORTDIR ^ "setup.exe","");

    五、安装包升级的时候如何检查安装目录下被安装程序是否正在运行。如果正在运行则跳提示退出。

            if( Is ( FILE_LOCKED, TARGETDIR^"XXX.exe")) then

        if(  MessageBoxEx( "检查到'XXXX'正在运行,请关闭后再重试","安装提示", WARNING|MB_OK )) then

                  abort;

               endif;

           endif;

    六、卸载完后判断根目录下及开始菜单是否卸载干净,不干净则强制删除

          查找开始菜单是否存在未卸载干净的文件夹

      nResult=QueryProgItem (FOLDER_PROGRAMS, "文件夹名称",svCmdLine, svWrkDir,svIconPath,nvIconIndex, svShortCutKey, nvMinimizeFlag);

      如果存在则强制删除

         if(!(nResult< 0))then  

               DeleteProgramFolder ( FOLDER_PROGRAMS^"文件夹名称" );

               //MessageBox ("DeleteProgramFolder success.", SEVERE);

      endif;

      查找安装目录是否存在未卸载干净的文件夹

      nResult=QueryProgItem (TARGETDIR, "文件夹名称",svCmdLine, svWrkDir,svIconPath,nvIconIndex, svShortCutKey, nvMinimizeFlag); 

      如果存在则强制删除

      if(!(nResult< 0))then

              DeleteProgramFolder ( TARGETDIR^"文件夹名称" );  

         endif;

    以上有些问题是网上找了好多资料 试过可以执行成功的。

    刚开始接触研究installshield,发现解决一个问题需要很长的时间,网上找资料不断的调试、修改、研究。解决完才发现找到适合的方法几分钟就能搞定,希望给大家带来个方便!

  • 相关阅读:
    BZOJ3752 : Hack
    XIV Open Cup named after E.V. Pankratiev. GP of SPb
    XIII Open Cup named after E.V. Pankratiev. GP of Ukraine
    BZOJ2087 : [Poi2010]Sheep
    BZOJ2080 : [Poi2010]Railway
    BZOJ2082 : [Poi2010]Divine divisor
    Moscow Pre-Finals Workshop 2016. National Taiwan U Selection
    XIII Open Cup named after E.V. Pankratiev. GP of Asia and South Caucasus
    XIII Open Cup named after E.V. Pankratiev. GP of Azov Sea
    XIII Open Cup named after E.V. Pankratiev. GP of SPb
  • 原文地址:https://www.cnblogs.com/daocaorenbx/p/InstallShield.html
Copyright © 2011-2022 走看看