没心没肺,长命百岁~~~

发布新日志

  • 打包时,Basic msi 工程的一个小问题。

    2008-01-22 15:53:42

    公司有三类产品,包都是一起打的,很久以来一直有这么一个问题:测试人员、开发人员、市场同胞,都会发现这么一个问题,如果自己的机器上装过A产品,那么在安装B产品的时候,会反复调出A产品的安装或者卸载界面,因为只有公司这三类人员才会在自己的机器上同时安装这两个产品,在客户那里几乎不可能出现。我去问了开发人员,猜测是注册表的问题,因为,公司的产品的注册表第一级目录相同,里面有些相近的项,但这只是猜测而已,并未曾证实,也不知道如何证实。

    直到有一天,打了个包给市场的,让他来装,他问了句,是那个某某某.msi吧?!我说,不对呀,是那个setup.Exe。人家告诉我,我一直就用这个装,好使。我晕!

     那天有个客户升级,也出现了相同的问题,那么肯定就不是不同产品间的冲突问题了。问了客户那边的情况,查了下,原来他原来安装包的工程是basic msi,后来的是 installscrīpt 类型的。又装了下试试,确实有这情况。把原来的工程类型改为installscrīpt应该就没问题了。

  • 职场就是战场

    2008-01-18 15:14:34

    找点时间,找点空闲,写写。

  • 关于installshield几个小点

    2007-11-14 11:00:48

    OnEnd是安装完后执行

    OnFirstUIBefore()是在某台电脑上第一次运行安装时执行.

    OnFirstUIAfter()在文件复制结束后运行.

    Disable(STATUSEX) 禁用进度条,屏蔽进度条

    用向导写的注册表,不在脚本里体现出来,要修改要到上图那个地方

    反之,在脚本里编写的注册表代码,在图里也不会有显示

     

     

  • 如何去掉安装完成后/卸载后机器重启代码

    2007-11-14 10:41:09

    将重启代码屏蔽掉.OnMaintUIAfter处注释掉如下代码:

    //if ( BATCH_INSTALL ) then
        // SdFinishReboot ( szTitle , szMsg1 , SYS_BOOTMACHINE , szMsg2 , 0 );
        //else    
            SdFinish ( szTitle , szMsg1 , szMsg2 , szOpt1 , szOpt2 , bvOpt1 , bvOpt
        //endif;

    重启的函数有两种:RebootDialog、SdFinishReboot注释的时候看清楚是用的那个。

    安装完成后的卸载代码写在OnFirstUIAfter里,安装后重起,注释掉相应的代码即可.

  • 关于组件注册的两个小代码

    2007-11-14 10:16:19

     if (Is(FILE_EXISTS, WINSYSDIR ^ "COMCTL32.OCX") = 0)then

               XCopyFile ( SUPPORTDIR ^ "COMCTL32.OCX" , WINSYSDIR, CLEAR_FILE_ATTR);

              szCommand ="regsvr32.exe /s";  

              szCmdLine=WINSYSDIR^"COMCTL32.OCX";  

              if   (LaunchApp(szCommand, szCmdLine)< 0)then  

                   MessageBox("Launch   regsvr32   failed.",   SEVERE);

              else 

                     MessageBox("注册成功",   SEVERE);

              endif;   

           else

                  MessageBox("file exist",   SEVERE);

           endif;  

    //////

    if (Is(FILE_EXISTS, WINSYSDIR ^ "COMCTL32.OCX") = 0)then

     

               XCopyFile ( SUPPORTDIR ^ "COMCTL32.OCX" , WINSYSDIR, CLEAR_FILE_ATTR);

     

              if   (LaunchApp("Regsvr32"," -s" +"'"+ WINSYSDIR^"COMCTL32.OCX"+"'")< 0)then  

     

                   MessageBox("Launch   regsvr32   failed.",   SEVERE);

     

              else 

     

                     MessageBox("注册成功",   SEVERE);

     

              endif;   

     

           else

     

                  MessageBox("file exist",   SEVERE);

     PS: 不能用regsvr32来注册, VBACV10D.L。如下图,否则安装的时候会报错。

     

     

  • basic msi and billboard——appreciate english!!!

    2007-11-09 10:24:03

    How to add a billboard to a basic msi project is troubling me recently.although  actually few people will sit in front of the computer to watch your billboards during installation. and I found some sentence like this "Please keep in mind that Billboards are not supported for Basic MSI projects, only Standard projects."“Installscrīpt MSI projects provide a few additional features that are not available in Basic MSI projects:” I should be happy because indicate the reason is not me but the kind of this project. another  proof is that  we can not find the Billboard under surpport file。

  • basic msi 下不小心在splash screen 下添加bbrd.bmp的问题—— 道路是会拐弯的

    2007-11-08 14:46:13

    你有没有发现,佛祖的眼睛是半闭的,也就是使既不是睁着的也不是闭着的。前两天觉得不知道是不是我不乖,佛祖要让我多受点折磨,当对面的同志发过来一把匕首的时候,我对他说,please,hurry!道路起起伏伏,不知道哪个地方就会拐弯,生活里要解决的问题一点点地解决。还真是老话说的,没有过不去的火焰山。

    早上在出租车上听到的交通广播:有个油罐车撞翻了一辆公交车,有伤亡。场面应该惨烈,这个司机不知道给多少家庭带来了无尽的痛苦。好像法律对交通事故的判罚并不是很重,加上保险公司的介入使司机同志们的意识愈发的淡漠。只是,即使是没有责罚,没有法律,我们就该横冲直撞么?!

    昨天在群里还说不要轻易使用basic msi 真能让他给整死。公司的产品沿用了了原来的工程,所以不得不用。碰到了一些些的问题。大家知道,在installscrīpt msi 工程下添加背景的话必须是bbrd.bmp,在splash screen下必须是setup.bmp,在添加时选择文件时也只认以这个名字命名的文体。but,在basic msi 下添加splash screen 时我把bbrd1.bmp放进去了,并且编译后在添加的位置不再显示该文件,因为这并不是我想要的结果,我想去掉他,却发现怎么也找不到相应的地方!搜啊搜找到了个这个http://community.macrovision.com/showthread.php?t=117532,文中已给出了解决方法,但开始我是没看懂的,知道这个问题和我的相似,经人点拨。于是:installationg Designer-->Additional Tools->Direct Editor--->tables 里查找“bbrd”结果发现在Setupfiles里有这个文件的链接——〉右键——〉drop 。

    ok 了。

  • 安装数据库是输入的密码以明文显示的问题

    2007-11-06 16:28:14

    生活中总是这样,同一块礁石你能碰到多次。这不数据库密码输入的地方回显又是明文,如果明文显示可以的话,还要密码干什么?!

    1、遇到的问题多了,最大的进步就是不会慌得手足无措,既然总碰到问题,那么再碰到一个又如何.我的数据库输入密码并回显的窗口时  Dlg_SdShowDlgEdit3:在Design里找到Dialog——〉Dlg_SdShowDlgEdit3:右键edit——〉找到密码回显的区域——passwd属性由false 设为true——rebuild 一下就好了。

    2、总归柳暗花明又一村了吧,NO!是破屋偏遭连夜雨,是按下葫芦起来瓢!——数据库安装完后,报错:transfer error/default feature/ Component VirtualDirComponent/error:文件名、目录名或卷标语法不正确。以往碰到过这个错误,用了偷懒的方法,用原来好用的工程替换下,时间紧的话有时候这个问题有时候就这么过去了,然,这不是解决问题的根本办法。我寻找了 VirtualDirComponent有关的东西发现,在该组下链接的是安装目录根目录下的文件,与建立的website下的虚拟目录相连接,于是作了如下的尝试:1)将原来的虚拟目录重新选择连接到 VirtualDirComponent中——不行报原来相同的错误。2)将原来的虚拟目录站点都删掉,重新建立一个。重新建立的时候会生成一个 VirtualDirComponent1,把该空 VirtualDirComponent1删掉,还是连接原来的VirtualDirComponent——不行,并且在IIS里也不能建立正确的站点和虚拟目录3)我重新建立一个空白工程,然后将脚本贴过去——还是不行。搜索了下,好像在安装的过程中很多程序都会碰到这个问题,那么肯定是有一些共性的东西了吧,我找我们的技术中心的同事过来看了一眼,然后他说是不是没写入权限,手动建了一个站点,虚拟目录。这一改原来在拷贝的前面报错,改为在安装后期报错。老师说,这肯定是后来还有个地方拷不进去找不着目录。我就问这个还有顺序么。他说:要先建虚拟目录然后拷贝文件。于是把所有文件及虚拟目录删掉,重新建立一个站点,虚拟目录,把安装文件重新加载一遍,问题就解决了,挖哈哈~

     

  • 关于一个安装包的几个问题

    2007-10-31 17:45:06

    1、一个安装包的要求:新作接口程序要安装到原有程序的目录下,但是要求原有a.exe不能直接覆盖,而是要求将a改为a1,将新的exe安装到原有安装目录下。

    1)但改名时如果原有程序是运行的则不能更名成功,必须先让原有程序关闭——正确做法是查找原有程序的唯一标志窗口句柄之类的,然后通过api函数关闭他或者通知用户关闭。但由于原有程序nG,重新安装困难,就采用了个偷懒的办法,上来就直接提醒用户问他是否已关闭程序,没有的话让他自己去关,非常鄙视下自己的偷懒行为,但暂时通过这个方法了解一个函数的用法,至于正确的方法,自己先挖个坑以后来填。

    szTitle = "确定是否已退出应用程序";
    SetDialogTitle (DLG_ASK_YESNO,szTitle1);
    if (AskYesNo("你已经退出U8的应用程序了么?否则不能正常安装", YES) = YES)
    then goto Dlg_SdWelcome;
    else  MessageBox ("请退出U8后重新执行安装程序", INFORMATION);
    abort;

    注:SetDialogTitle (nDialogId, szTitle),DLG_ASK_YESNO是AskYesNo的nDialogId,abort为直接退出系统。

    2)查找原有程序的安装目录,确保新程序找到原安装路径(次日解决……)只要奋战总会有结果,虽说是照猫画虎的事,出来的东西也比较粗糙,但总归是问题在一点一点地解决

      RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE); 
      nvType1 = REGDB_STRING;
      szStrName1 = "SOFTWARE\\Ufsoft\\WF\\V8.610\\Install\\CurrentInstPath";
       if (RegDBKeyExist (szStrName1)=1)
          then  RegDBGetKeyValueEx (szStrName1, "", nvType1, svStrValue, nvSize);
            //  MessageBox (svStrValue, INFORMATION);
             TARGETDIR   = svStrValue;  //svStrValue是获得的路径
            
       else  MessageBox ("请确认您的机器上安装了某某应用平台", INFORMATION);
       endif;

    路径是找到了,貌似我也把该找到的路径赋给 TARGETDIR这个默认的安装路径了,那么应该可以了吧?but!脚本没有执行,连我的打印信息都没有显示,并且路径没有改变。

    one:将该段脚本放到最前端,防止被其他的脚本跳转后忽略。

    two:找到Dlg_SdAskDestPath2:

      nResult = SdAskDestPath2( szTitle, szMsg, TARGETDIR );用TARGETDIR代替函数的svDir(显示在安装界面为回显值)
      TARGETDIR = svStrValue; //事实证明这里需要重新设置一下,如果还用原来的svDir,安装路径还是不会安装到你从注册表里取到的值。

    3)将原来的a.exe改名为olda.exe,把新的a.exe拷贝到安装目录下,谁知道用什么函数请告诉我昂,please!希望下午能解决。

    if (Is(FILE_EXISTS, TARGETDIR^"a.exe") = 1)
    then   RenameFile (TARGETDIR^"a.exe", TARGETDIR^"aold.exe");

    endif;

    问题时放在哪里的问题,要保证是安装前的exe,而不是我后拷进去的那个,在脚本里翻了翻Dlg_SdStartCopy2:应该是正式拷贝之前的窗口,就放在这个窗口里面,试了下居然中了,只是看起来乱糟糟的。前辈告诉我写个函数,在firstuibefore调用 或者写在onbegin里 ,这个回头试下。

    4)关于.net组件的注册,开发人员说不能用直接的regsvr32这种注册形式,他把注册的命令写到一个批处理文件中,说是直接运行批处理就可以,但实际上批处理的内容如下:

    cd c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322
    regasm /codebase /tlb:C:\WINDOWS\system32\UFCOMSQL\EnDecryptoUtil.tlb C:\WINDOWS\system32\UFCOMSQL\EnDecryptoUtil.dll 其中c:\WINDOWS\system32 根据操作系统安装的路径不同也不相同,如操作系统是装在f盘的,那么相应的批处理里的c就要变为f,这样看起至少应该把它写为WINDIR这种东西,但是批处理文件是否会认这种变量呢?最初的想法是获得当前操作系统的盘符,把该盘符赋给一个变量,然后通过动态写批处理文件来实现。掂量了掂量,觉得自己做起来应该很困难,而且也不懂.net。每到这时候我就会想,莫非守护我的天使睡着了么,为什么非要出些花样来考验我,莫非大成在那遥远的将来?!好在有个前辈如是说:

    阿土伯 15:34:52
    一般来说bat里的路径都是同级,也就是不写路径,只有文件名
    阿土伯 15:35:29
    然后,你要将bat、以及注册程序、被注册文件安装到同一目录下
    阿土伯 15:35:52
    然后在copy file结束后调用bat注册文件
     

    找到regasm.exe这个程序,并google了这个东西的用法,还确认了这个程序是可以单独拿出来用的,那么我就把这个文件和被注册文件一起拷贝到指定的安装目录下,问题就解决了。

    5)开发人员又说,这个程序将来会面向三类是用人群,需要做下判断,让每种类型的人只安装自己的程序并且每部分都有自己独立的数据脚本,这怎么判断难道要到数据库里去比较什么东西?我一听就害怕,就马上建议说,不如打三个包算了,要判断自己判断去!……能这样说,能这样做吗?

    do you want to customize your installation? —>Yes 这是一个是否选择部分安装的功能,而我这里并不想让客户选择完全安装还是部分安装(对话框sdsetuptype2),我只是想让他选择安装,那么我就需要把该对话框去掉,只保留sdFeatureTree,注意调整对话框之间的跳转关系就好了。

    建立 A,B,C三个F,给每个F建立相应的数据库脚本,安装文件的对应关系。但运行起来发现三个F都被默认了选了钩,这显然不是我要的,我只希望默认一个或什么都不默认,让用户自己选。

    FeatureSelectItem (MEDIA, "B", FALSE);

    FeatureSelectItem (MEDIA, "C", FALSE);

    貌似搞定,等测试完后会汇报结果的,敬请期待……



           

     

     

     

  • 设置excel隔行颜色不同

    2007-10-31 11:06:24

    时值个人空间刚刚开通的热乎劲,碰巧有朋友问起这个问题,就现学现卖拿上来。

    1)选定你要设置的行列范围,如果没有列限制就只选行,如果没有行限制就只选列,如此举一反三……

    2)格式——〉条件格式——〉公式

    =AND(MOD(ROW(),2)=0,COLUMN()<10) 在格式处选择你要设置偶数行的颜色—〉

    添加=AND(MOD(ROW(),2)=1,COLUMN()<10)在格式处选择要设置的奇数行颜色

    若是三行四行不同,设置不同的取模值就可以了,that's all.

  • 好了,上菜啦~~~installshield安装包的背景添加

    2007-10-31 10:36:44

    佛要金装,人要衣装,安装包要个性装,看看一些大集团的安装包,再看看自己的,就会觉得自己有好多的事要做,加油~

    问题:如何给安装包添加背景(就是安装过程中一直待在后面的图片),一般通常用的工程有两类—basic msi 和 installscrīpt两种。前者能满足基本安装包需要,而后者支持直接添加脚本。

    1)在 installscrīpt msi下——〉installation——〉behavīor and logic——〉billboards 下直接添加你要放上的图片就可以了,只是要注意一下图片必须是bmp 格式的,命名必须是以BBrd#.bmp这样命名,#是阿拉伯数字 。或者直接在脚本function OnFirstUIBefore()里添加下面这样的脚本

        Enable(BACKGROUND);
        Enable(FULLWINDOWMODE);
        PlaceBitmap ( SUPPORTDIR ^ "bbrd1.bmp" , 0 , 0 , 0 , FULLSCREENSIZE );

    在billlboards 下有个splash screen 这是在安装启动前显示的画面,命名必须为setup.bmp,直接在该处右键添加就可以了

    2)在basic msi 工程里你会发现behavīor and logic下没有billboards这一项,而且installscrīpt 貌似也不可用,这可咋办呢?

  • 大家快来看啊,刚出炉的个人空间,热乎的~~~

    2007-10-30 14:18:00

    有一阵子整天翻google,发现搜索引擎是个好东西,有时候问题就是这么解决的,但后来发现相同的问题再次碰到,居然,居然一时想不起来当时是怎么解决的,唉不中用了.......不如记下来,一来当个笔记本用,二来希望能够帮助后来的人,网络共享的精神要充分发扬的嘛.同时也希望有相似问题的同仁将自己的心得贴上来,这样加起来也许就是一个最全面的help文档!!!

数据统计

  • 访问量: 7384
  • 日志数: 12
  • 建立时间: 2007-10-30
  • 更新时间: 2008-01-22

RSS订阅

Open Toolbar