网上到处都是。
http://www.google.com/search?q=install+shield+%D7%A2%B2%E1%B1%ED&hl=zh-CN&lr=

解决方案 »

  1.   

    使用install shield制作PB6程序的安装盘 
      
    [返回][主页] 
     第一篇 
     第二篇 
     第三篇 
     第四篇 
     第五篇 
     第六篇 
     第七篇 
     第八篇 
     第九篇 
     第十篇 
     第十一篇 
    使用install shield制作PB6程序的安装盘(一)作者:zhhz本文介绍这种PB6+Odbc+sqlany where
    情况下的安装程序的制作,这种情况是最复杂的情况,请大家支持到底需要装什么呢?(1)PB运行时刻库
        a.必要的Microsoft接口
            Msvcrt.dll
            Msvcrt40.dll
            Olepro32.dll
            这三个文件是必不可少的,而且不一定能保证被安装的机器上一定有这三个文件,所以  做安装盘时最好包含。
        b.PB运行时刻库(32位)
            pbaen60.tlb 对OLE的支持
            pbdwe60.dll 对数据窗口的支持
            pbvm60.dll PB虚拟机,一定要有
            只有三个就够了!没有想到吧?
    (2)PB与数据库客户端的专用接口或ODBC接口
        pbodb60.dll
        pbodb60.ini pb ODBC 专用接口 (sql anywhere必须装)
        pbor7360.dll pb oracle7.3 专用接口
        pbsyc60.dll pb sybasew 专用接口
        其他的我没有用过,不用都装,需要哪个就装哪个。
    (3)PB应用程序和相应的PBD或DLL
        这就是你的exe和pbd(DLL)了!
    (4)sql anywhere相应的文件
        dbeng50.exe
        dbl50t.dll
        wl50ent.dll
        wod50t.dll
        wodbc.hlp *当然可以不装拉
        wtr50t.dll
        这5个文件保证已经被创建的数据库可以正常运行
    (5)sql anywhere DB文件
        只要包含*.db就可以了,*.log不要(加上*.log有时会出问题)
    (6)帮助文件和其他文件
        怎样做hlp文件不用我告诉你吧!
    …………to be continued回页首
    使用install shield制作PB6程序的安装盘(二)
    作者:zhhz如果主机上没有装ODBC那么需要装这些文件:
        Ds16gt.dll
        Ds32gt.dll
        Odbc16gt.dll
        Odbc32.dll
        Odbc32gt.dll
        Odbcad32.exe
        Odbccp32.cpl
        Odbccp32.dll
        Odbccr32.dll
        Odbcinst.cnt *当然可以不要拉
        Odbcinst.hlp *当然可以不要拉
        Odbcint.dll
        Odbctrac.dll
        一个都不能少!    如果主机上有ODBC那你是不容易覆盖它的,如果你感觉还是自己装比较保险,可以把这些文件复制到任何一个包含在Path中的目录里所有需要的运行时刻库和文件路径都加入path中,在制作规范的安装程序时,主程序和相应的PBD(DLL)和相应的PB运行时刻库位于同一个目录里,ODBC driver和sql anywhere位于单独的目录里。千万不要混在一起,(因为太难看拉)用installshield要完成的工作1.安装界面定制
    2.文件复制
    3.更改注册表
    4.更新autoexec…………………… to be continued
    (这些库是在95;下找出来的,98下我没有是试过)回页首
    使用install shield制作PB6程序的安装盘(三)
    作者zhhz下面讲的就是如何使用installshield5东方版拉我只有这个版本,不过它支持中文,挺好的。
    如果你没有,可以试试从这down一个。ftp://202.196.64.9/pub/InstallShield/IS5EAST.exe
    ftp://202.196.64.9/pub/InstallShield/serialno.txt1)先用project WIZARD做一个新的项目
    在选择需要的对话BOX时最好全选上,这些对话BOX去好去,加就有点麻烦拉。
    安装类型中选上缺省的三种,就是compact,typical,custom,将来不要也可以删掉。
    其他都用缺省的,以后到项目里改。
    点击完成后,小功告成,现在有一个空项目拉!2)左中靠下的这些tab page是很重要的
    a、scripts ……这就是你的setup脚本,语法不知道象c还是更象pascal。scripts你是不能不接触的,否则你就只能做点小东西。is的script还是很强大的,也很有趣,在连载XXX中会讲一讲。b、component ……元件嘛,叫组件比较合适。这里定义的就是你在选择安装类型时(就是custom时)用户看到的东西,把他们改成中文吧。
    这里可以添加新的com,删除已有的com,改名字,如果你不喜欢用菜单,点点老鼠右键。
    它们的具体属性系统都有很直接的提示,自己去研究吧。
    Destination指的是文件的安装目的地,其中可以用户自定义目的,这个在在连载XXX中会讲一讲。
    有个include file group这是怎么一回事呢?c、file group ……原来是它。原来文件不是直接连接到component上,而是文件先连接到file group里,再由File group连接到component上。文件-》file group-》component。
    file group取什么名字都没有关系,在安装时用户看不到,用户只看到componentd、Setup Type ……不要改成中文名字,安装时自动变成中文的。e、resource ……里的东西是项目安装定义,不要忽视了f、Setup file ……把安装一开始的欢迎界面的bmp加进来,旧的删掉吧,其实根本不用改什么,只要把项目目录里的setup.bmp换掉就好了。其他的东西我没有研究过。g、Media ……讲不出什么,我根本没有动过它。3)好了,先编译一下吧,喂,什么都没加呢!没关系,编译一下有点成就感。用media build wizad生成安装文件,运行一下看看。…………to be continued
    (IS博大精深,我也是只知道一些皮毛,有什么需要补充的地方,请大虾抛玉)回页首
    使用install shield制作PB6程序的安装盘(四)
    作者zhhz终于要讲scripts了
    scripts可是大小写敏感的!
    “\”是转义字符,就相当与PB的“~”
    “\r\n\t”等变量类型:
    BOOL TRUE or FALSE
    CHAR 8-bit 有符号字符
    DWORD 同NUMBER
    HWND 窗口句柄(内部类型是NUMBER)
    INT 同NUMBER
    LIST 指向InstallShield list的指针(内部类型是NUMBER)
    LONG 同NUMBER
    LPSTR 同POINTER
    NUMBER 有符号4字节整数
    POINTER 指向数据的指针(如int i;p=&i)
    SHORT 同NUMBER
    STRING 字符串赔本大甩卖!
    字符串的操作:
    (1) "+" 加
    "123"+"345" = "123345" (12345)
    "\\123"+"\\345" = "\\123\\345" (\123\345)
    (2) "^" 路径加
    "123"^"345" = ".\\123\\345" (.\123\345)
    "\\123"^"345" = "\\123\\345" (\123\345)
    "\\123"^"\\345" = "\\123\\345" (\123\345)
    如果你弄不清楚,就用“+”吧
    (3) "%" str1 % str2
    if str1包含str2 then true else false
    和StrFind (str1, str2)一样1-函数(Function)***************函数(Function)
    举个例子://函数声明
    prototype RectangleArea (INT,INT);//函数体
    function RectangleArea (nLength, nWidth) //函数名
    INT nVal; //局部变量定义
    begin
    nVal = nLength * nWidth; //函数体
    return nVal;end;2-循环*******************循环
    I、for循环a、正循环
    for iCount = 1 to 10 //step 1
    MessageBox ("You'll see this 10 times", INFORMATION);endfor;b、负循环
    for j = 20 downto 10 step 5
    MessageBox ("You will see this three times", INFORMATION);
    endfor;II、repeat……until循环
    nCount = 1;
    repeat
    MessageBox("Count is less than 5", INFORMATION);
    nCount = nCount + 1;
    until (nCount = 5);III、while……endwhile循环
    nCount = 1;
    while (nCount < 5)
    MessageBox ("This is still true.", INFORMATION);
    nCount = nCount + 1;
    endwhile;3-判断**********************判断
    a、
    if (szStringA = "exit") then
    AskYesNo ( "Are you sure you want to exit?" , NO );
    endif;b、
    if (condition) then
    // statements to be executed if condition is true
    else
    // statements to be executed if condition is false
    endif;c、
    if (first condition) then
    // statements to be executed if condition is true
    elseif (second condition) then
    // statements to be executed if condition is false
    elseif (third condition) then
    // statements to be executed if third condition is false
    endif;d、
    if condition goto labelname;
    ……to be continued回页首
    使用install shield制作PB6程序的安装盘(五)
    如果转载,请注明(作者zhhz)系统变量有时候是很方便的!
    跳楼大拍卖!!!
    BATCH_INSTALL 指示当传输文件采用LOCKEDFILE或SHAREDFILE时是否锁定文件
    CMDLINE Setup.exe传递的命令行参数
    COMMONFILES Common files全路径如“c:\program file\common files”
    ERRORFILENAME
    FOLDER_DESKTOP Windows 95 或Windows NT 4.0桌面folder的路径
    FOLDER_PROGRAMS Windows 95 或Windows NT 4.0 开始菜单中开始\程序 的folder
    FOLDER_STARTMENU Windows 95 或Windows NT 4.0 开始菜单中开始 的folder
    FOLDER_STARTUP Windows 95 or Windows NT 4.0 开始菜单中启动 的folder
    INFOFILENAME InstallShield创建的备份文件全文件名
    ISRES _isres.dll全文件名
    ISUSER _isuser.dll全文件名
    ISVERSION 版本
    MEDIA 当前Media库名
    MODE 指示程序运行于normal还是silent模式
    PROGRAMFILES Windows 95 or Windows NT 4.0 “Program files” folder
    SELECTED_LANGUAGE 安装选择的语言号
    SRCDIR 安装源目录的全路径
    SRCDISK 安装源目录的盘符
    SUPPORTDIR 临时文件路径
    TARGETDIR 安装目的目录的全路径
    TARGETDISK 安装目的目录的盘符
    UNINST unInstallShield程序用的反安装文件全文件名
    WINDIR Windows的全路径(c:\windows)
    WINDISK Windows位于的盘符
    WINSYSDIR Windows\system的全路径(c:\windows\system)
    WINSYSDISK Windows\system位于的盘符………………to be continued回页首
     使用install shield制作PB6程序的安装盘(六)
    如果转载,请注明(作者zhhz)请大家支持常用的DIALOG
    最近这几篇讲SCRIPTS的不用都看,用的时候查一查就可以了。
    AskText
    AskYesNo
    MessageBox
    SdShowDlgEditx
    SdShowMsg
    SprintfBox
    SetDialogTitle
    *************所有dialog使用前,请务必将所有变量初始化!**********1、AskText (szQuestion, szDefault, svResult);
    希望用户输入一行文本,szQuestion是问题,szDefault缺省文本,svResult用户输入文本
    例:
    svResult="";
    szMsg = "请输入.";
    szDefault = "123456";
    AskText(szMsg, szDefault, svResult);2、AskYesNo (szQuestion, nDefault);
    询问dialog,nDefault为缺省TAB位置,返回YES或NO
    例:
    if (AskYesNo("YES?", YES) = YES) then
    //
    endif;3、MessageBox (szMsg, nType);
    就是MessageBox,szMsg是显示的消息
    nType:
    INFORMATION
    WARNING
    SEVERE
    例:
    szMsg = "ABCDEFG.";
    nType = WARNING;
    MessageBox(szMsg, nType );
    4、SdShowDlgEdit1 (szTitle, szMsg, szField1, svEdit1);
    SdShowDlgEdit2 (szTitle, szMsg, szField1, szField2, svEdit1, svEdit2);
    SdShowDlgEdit3 (szTitle, szMsg, szField1, szField2, szField3, svEdit1, svEdit2, svEdit3);
    有一个,两个或三个文本输入行
    例:
    szTitle = "SdShowDlgEdit2 Example";
    szMsg = "All files within the Source directory will be copied into the Target directory.";
    szField1 = "Source:";
    szField2 = "Target:";
    svEdit1 = "C:\\EXAMPLE\\SOURCE";
    svEdit2 = "C:\\EXAMPLE\\TARGET";if (SdShowDlgEdit2(szTitle, szMsg, szField1, szField2, svEdit1, svEdit2) < 0) then
    MessageBox("SdShowDlgEdit2 failed.", SEVERE);
    endif;5、SdShowMsg (szMsg, bShow);
    这是一个很好的东东,出现一个光秃秃的提示窗,没有Button和Title BAR
    例:
    szMsg = "正在更新注册表.";
    SdShowMsg(szMsg, TRUE);
    //更新注册表……………………
    SdShowMsg(szMsg, FALSE);6、SprintfBox (nType, szTitle, szFormat [,arg] [,...]);
    nType:
    INFORMATION
    WARNING
    SEVERE
    和MessageBox差不多,有人喜欢用。
    例如:
    szString = "This is a sample text string";
    nNumber = 420;
    cChar = 'P';szTitle = "SprintfBox Example";
    szFormat = "String: %s";SprintfBox(INFORMATION, szTitle, szFormat, szString);szFormat = "Number: %d";
    SprintfBox(WARNING, szTitle, szFormat, nNumber);szFormat = "Character: %c";
    SprintfBox(SEVERE, szTitle, szFormat, cChar);7、SetDialogTitle (nDialogId, szTitle);
    上面的MessageBox没有标题,怎么办?用这个!
    nDialogId:
    DLG_ASK_TEXT AskText
    DLG_ASK_YESNO AskYesNo
    DLG_MSG_INFORMATION Information-style MessageBox.
    DLG_MSG_SEVERE Severe-style MessageBox.
    DLG_STATUS Changes the title of the dialog-style progress indicator.
    DLG_MSG_WARNING Warning-style MessageBox.
    DLG_USER_CAPTION user-defined messagebox .
    例如:
    nDialogId = DLG_ASK_YESNO;
    szTitle = "SetDialogTitle Example";
    if (SetDialogTitle (nDialogId, szTitle) < 0) then
    MessageBox("SetDialogTitle failed.", SEVERE);
    else
    AskYesNo("Did SetDialogTitle change this title?", YES);
    endif;……………………to be continued回页首
    使用install shield制作PB6程序的安装盘(七)
    如果转载,请注明(作者zhhz)请大家支持越写越复杂拉!常用注册表修改函数1、RegDBSetDefaultRoot (nRootKey);
    这个函数是设置缺省注册表类,在使用读和写以前,一定要使用这个函数设置一下。
    HKEY_CLASSES_ROOT
    HKEY_LOCAL_MACHINE
    HKEY_CURRENT_USER
    HKEY_USERS2、RegDBCreateKeyEx (szKey, szClass);
    创建一个键名,没用!因为RegDBSetKeyValueEx ()会自动创建。3、RegDBSetKeyValueEx (szKey, szName, nType, szValue, nSize);
    nType
    REGDB_STRING string,不能有换行
    REGDB_STRING_EXPAND 扩充环境变量表达式,如 "%MYPATH%".
    REGDB_STRING_MULTI string,可以换行
    REGDB_NUMBER 数字,我没有用过,其实注册表里的都是字符串,还是转换成字符串吧
    REGDB_BINARY 二进制数据,先要存在string里
    设置一个键值,如果没有键名回会自动创建该键名。
    szName 键名
    szKey 键
    szValue 键值
    nSize 如果是REGDB_STRING, REGDB_STRING_EXPAND或 REGDB_NUMBER取-1
    否则大于等于最小长度
    返回0成功,<0失败4、RegDBGetKeyValueEx (szKey, szName, nvType, svValue, nvSize);
    得到一个键值
    和RegDBSetKeyValueEx差不多。
    返回0成功,<0失败还有一些delete之类和一些特殊的reg函数。一般用不到。特殊的reg函数只是简化一些操作,实现操作的这几个基本的都能实现。讲了这么多,还是不懂?举个例子:
    RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
    我写,写写写
    RegDBSetKeyValueEx ( "SOFTWARE\\Microsoft\\Internet Explorer\\Plugins\\Extension\\.pbd" , "" , REGDB_STRING , "" , -1 );
    RegDBSetKeyValueEx ( "SOFTWARE\\Microsoft\\Internet Explorer\\Plugins\\Extension\\.pbd" , "Content Type" , REGDB_STRING , "application/vnd.powerbuilder6" , -1 );
    于是:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Plugins\Extension\.pbd [缺省] = ""
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Plugins\Extension\.pbd Content Type = "application/vnd.powerbuilder6"我读,读读读
    if ( RegDBGetKeyValueEx ("Software\\Netscape\\Netscape Navigator\\Main","Install Directory" , nvType, svNetscape , nvSize )<0) then
    svNetscape=TARGETDIR;
    else
    svNetscape=svNetscape+"\\Program\\Plugins";
    endif;……………………to be continued回页首
    使用install shield制作PB6程序的安装盘(八)
    如果转载,请注明(作者zhhz)请大家支持常见需要修改注册表的情况:
    我只作过32位的,以下都是基于32位的1、安装32位ODBC for Sql Any Where
    不用修改
    真是猪,没有你说什么!不怪我拉,因为就是不用拉!2、安装SQL anywhere的DB
    都加上全路径,避免...
    svDBprofile = "LAW"; //数据库别名,就是在PB连接串中的那个
    svDB = TARGETDIR+"\\db\\law.db";//law.db的全名
    svWod50t = TARGETDIR+"\\sqlany50\\wod50t.dll";//wod50t.dll的全名
    svStart = TARGETDIR+"\\sqlany50\\dbeng50 -Q";//dbeng50.exe的...,注意不要加上.exe,"-Q"表示不要那个讨厌的sqlanywhere窗口跑出来。RegDBSetDefaultRoot ( HKEY_CURRENT_USER );
    RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile , "AutoStop" , REGDB_STRING , "YES" , -1 );//不用改
    RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile , "DatabaseFile" , REGDB_STRING , svDB , -1 );
    RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile , "DatabaseName" , REGDB_STRING , svDBprofile , -1 );
    RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile , "Driver" , REGDB_STRING , svWod50t , -1 );
    RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile , "PWD" , REGDB_STRING ,"sql" , -1 );//不用改
    RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile , "UID" , REGDB_STRING ,"dba" , -1 );//不用改
    RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile , "Start" , REGDB_STRING , svStart, -1 );3、安装PB的window plugin (also for IE4.0)
    RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
    svPath="c:\\Program Files\\Internet Explorer\\plugins\\nppba60.dll";LongPathToShortPath ( svPath );
    RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
    RegDBSetKeyValueEx ( "SOFTWARE\\Microsoft\\Internet Explorer\\Plugins\\Extension\\.pbd" , "" , REGDB_STRING , "" , -1 );
    RegDBSetKeyValueEx ( "SOFTWARE\\Microsoft\\Internet Explorer\\Plugins\\Extension\\.pbd" , "Content Type" , REGDB_STRING , "application/vnd.powerbuilder6" , -1 );
    RegDBSetKeyValueEx ( "SOFTWARE\\Microsoft\\Internet Explorer\\Plugins\\Extension\\.pbd" , "Location" , REGDB_STRING , svPath , -1 );
    RegDBSetKeyValueEx ( "SOFTWARE\\Microsoft\\Internet Explorer\\Plugins\\Extension\\.pbd" , "Version" , REGDB_STRING , "6.5.00.444" , -1 );
    RegDBSetKeyValueEx ( "SOFTWARE\\Microsoft\\Internet Explorer\\Plugins\\MIME\\application/vnd.powerbuilder" , "Extension" , REGDB_STRING , ".pbd" , -1 );
    RegDBSetKeyValueEx ( "SOFTWARE\\Microsoft\\Internet Explorer\\Plugins\\MIME\\application/vnd.powerbuilder6" , "Extension" , REGDB_STRING , ".pbd" , -1 );RegDBSetDefaultRoot ( HKEY_CLASSES_ROOT );
    RegDBSetKeyValueEx ( ".pbd" , "" , REGDB_STRING , "PowerBuilder.Application" , -1 );
    RegDBSetKeyValueEx ( ".pbd" , "Content Type" , REGDB_STRING , "application/vnd.powerbuilder" , -1 );
    RegDBSetKeyValueEx ( "MIME\\Database" , "Content Type" , REGDB_STRING , "application/vnd.powerbuilder" , -1 );4、//注册Access数据库
    ////////////////////////////////////////////////////////////
    RegDBSetDefaultRoot ( HKEY_CURRENT_USER );
    svDB="SOFTWARE\\ODBC\\ODBC.INI\\"+"LAW";
    svDBFile = TARGETDIR+"\\db\\law.mdb";//law.db的全名
    szDriver = WINSYSDIR+"\\odbcjt32.dll"
    RegDBSetKeyValueEx ( svDB , "DBQ" , REGDB_STRING , svDBFile , -1 );
    RegDBSetKeyValueEx ( svDB , "Driver" , REGDB_STRING , szDriver , -1 );
    RegDBSetKeyValueEx ( svDB , "FIL" , REGDB_STRING , "MS Access;" , -1 );
    RegDBSetKeyValueEx ( svDB , "DriverId" , REGDB_STRING , "25" , -1 );
    RegDBSetKeyValueEx ( svDB , "SafeTransactions" , REGDB_STRING , "0" , -1 );
    RegDBSetKeyValueEx ( svDB , "UID" , REGDB_STRING , "" , -1 );RegDBSetKeyValueEx ( svDB +"\\Engines\\jet" , "ImplicitCommitSync" , REGDB_STRING , "Yes" , -1 );
    RegDBSetKeyValueEx ( svDB +"\\Engines\\jet", "UserCommitSync" , REGDB_STRING , "Yes" , -1 );
    RegDBSetKeyValueEx ( svDB +"\\Engines\\jet", "MaxBufferSize" , REGDB_STRING , "512" , -1 );
    RegDBSetKeyValueEx ( svDB +"\\Engines\\jet" , "PageTimeout" , REGDB_STRING , "5" , -1);
    RegDBSetKeyValueEx ( svDB +"\\Engines\\jet", "Threads" , REGDB_NUMBER , "3" , -1 );
    这个我没有试过,也不知道行不行。应该差不多吧!5、在注册表里添路径,例如
    RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
    RegDBSetKeyValueEx ( "Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\" , "Myexe.exe" , REGDB_STRING , TARGETDIR + "\\Myexe.exe" ,-1 );
    我不喜欢这样做,喜欢把路径加入autoexec的Path里。………………………………to be continued回页首
    使用install shield制作PB6程序的安装盘(九)
    如果转载,请注明(作者zhhz)请大家支持在scripts里点右键,会出现function wizard的选项,试一试,很好用的。
    改写Autoexec中的Path改写Path相关的文件操作FindFile 看看文件是否存在
    CreateFile 创建文件
    OpenFileMode //打开模式
    OpenFile //打开文件
    WriteLine //写一行OpenFileMode(FILE_MODE_APPEND);if (FindFile("c:\\", "autoexec.bat", svResult) < 0) then //没有,需要create一个
    CreateFile(nvFileHandle, "c:\\","autoexec.bat" );
    else //有拉,打开他
    OpenFile ( nvFileHandle , "C:\\" , "Autoexec.bat" );
    endif;LongPathToQuote (svDir , TRUE );//如果是长文件名,要加上引号,否则PATH不认的!
    //如path=c:\program file;c:\windows一定会出错,应该写成path="c:\program file";c:\windows
    //非长文件名加不加都没有关系WriteLine( nvFileHandle," ");
    WriteLine( nvFileHandle,"REM ********ADD BY myexe********");
    WriteLine( nvFileHandle ,"Set PATH=" +svDir +";%PATH%"); //加全!!一般来说只有一个work DIR是not enough的
    WriteLine( nvFileHandle,"REM ********END OF myexe********");
    WriteLine( nvFileHandle," ");
    CloseFile(nvFileHandle);…………to be continued回页首
    使用install shield制作PB6程序的安装盘(十)
    如果转载,请注明(作者zhhz)请大家支持在桌面和开始菜单中添加快捷方式:都用一个函数,就是:
    AddFolderIcon (szProgramFolder, szItemName, szCommandLine, szWorkingDir, szIconPath, nIcon, szShortCutKey, nFlag);参数:1)szProgramFolder
    FOLDER_DESKTOP
    FOLDER_STARTMENU
    FOLDER_STARTUP
    FOLDER_PROGRAMS
    或者
    FOLDER_STARTMENU ^ "ACCESSORIES\\GAMES"
    等等
    现在发现系统变量的好处了吧!参见“使用install shield制作PB6程序的安装盘(五)”2)szItemName
    快捷方式的名字,在Windows 95 和 Windows NT 4.0没有特别的限制
    这些“/ \ : ? < > |”是不能用的3)szCommandLine
    一般来讲就是文件全名。后面也可以带命令行参数,比如:"C:\myexe\myexe.exe -a",引号加不加我忘拉,你试试吧!
    文件不一定是.exe,任何注册了的东东都可以,比如.txt , .htm , .gif 等等一般来说,这个命令是反安装命令。
    C:\WINDOWS\IsUn0804.exe -f"C:\myexe\Uninst.isu"4)szWorkingDir
    工作路径,一般用""5)szIconPath
    需要显示的icon文件名6)nIcon
    图标号,从0开始,0,1,2,3,……,使用应用程序自带的图标取0就可以拉7)szShortCutKey
    快捷键,比如想输入"Ctrl + F8"就蹦出来。
    注意,当快捷键和系统冲突时,自动无效。
    一般允许的是" Ctrl + Alt + "+key
    例如 "Ctrl + Alt + F8"
    或 "Ctrl + Alt + K"
    "Alt + "key 好象不行,
    "Ctrl + "key 可能可以8)nFlag 可以或操作
    REPLACE 如果原来有,就替代它
    RUN_MAXIMIZED 运行时最大化
    RUN_MINIMIZED 运行时最小化
    NULL 以上一个都不要注释:
    szCommandLine中如果应用程序名是长文件名,必须用引号(单双都行)引起来,文件名是变量的话就用LongPathToQuote函数做一下。
    szWorkingDir 和szIconPath不要用LongPathToQuote函数做,InstallShield自动会处理,还是用""比较好!
    LongPathToQuote就是------------长文件名加引号!这么简单还要问!例子:
    svResult ="";
    if (FindFile (svDir, "XTGL.EXE" , svResult )=0) then //先找一下,因为有可能用户没有选这个部件
    svPath = TARGETDIR ^ "xtgl.exe";
    LongPathToQuote ( svPath , TRUE ); //很有必要的
    AddFolderIcon ( FOLDER_PROGRAMS ^ "我的应用", "系统管理" , svPath , "" , "" , 0 , "" , REPLACE ); //在开始菜单->我的应用->系统管理
    AddFolderIcon ( FOLDER_DESKTOP , "系统管理" , svPath , "" , "" , 0 , "Ctrl + Alt + K", REPLACE ); //在桌面上加一个,带快捷键耶!
    endif;下面就是自动反安装,没有必要也装到桌面上吧!
    svPath = TARGETDIR ^ UNINST_LOGFILE_NAME; //UNINST_LOGFILE_NAME一般在scripts一开始就定义为:#define UNINST_LOGFILE_NAME "Uninst.isu"
    LongPathToQuote ( svPath , TRUE );
    AddFolderIcon ( FOLDER_PROGRAMS ^"我的应用" , "卸载" , "c:\\windows\\IsUn0804.exe -f"+svPath ,"" , "" , 0 , "" , REPLACE );
    ……………………TO BE CONTINUED回页首
    使用install shield制作PB6程序的安装盘(十一)
    如果转载,请注明(作者zhhz)请大家支持请注意,这并不只是在翻译文档,其中被我组织和编辑过,并且有我的一些见解(哈,不一定对)。用户接口函数是一些比较低层的函数,例如FindWindow,
    用户接口函数有时候是很有用的,比如要在背景上放AVI,
    但是这些是可要可不要的。然而用户接口Enable (nConstant)和Disable (nConstant)是很重要的,不得不用nConstant的参数:
    BACKBUTTON 允许/禁止“后退”按钮,缺省是允许的。BACKGROUND 允许/禁止显示主背景窗口。缺省是允许。
    在自动生成的SCRIPTS里,第一行就有 Disable( BACKGROUND ),这是为了防止SetupInstall()造成的闪烁。不信你把它去掉试试。BACKGROUNDCAPTION 允许/禁止显示主背景窗口标题栏。全屏时没用,缺省是允许。BITMAP256COLORS 允许/禁止256色模式,在PlaceBitmap里用CORECOMPONENTHANDLING 允许/禁止中心组件标识。有些文件是和注册表相关的,如ACTIVE X,假设以前有,反装时去掉了这种关联,那么别的程序也不能用拉。如果enable,所有在Corecomp.ini中定义的文件都不会被标识。
    16位系统和winnt3.5不支持。DEFWINDOWMODE 允许/禁止安装运行于窗口模式。DIALOGCACHE 允许/禁止窗口缓冲技术,可以减少屏幕闪烁。缺省是禁止。FEEDBACK_FULL 允许/禁止显示进度标尺。当“文件复制”条显示时,自动就显示进度尺了。进度尺就是那个百分之多少多少的东东。FULLWINDOWMODE 允许/禁止背景窗口处于全屏模式。缺省是允许。HOURGLASS 允许/禁止鼠标指针为沙漏形状INDVFILESTATUS 允许/禁止文件拷贝进度,就是显示“copying myexe.exe to c:\myexe\myexe.exe ”,缺省是禁止,快打开吧!LOGGING 允许/禁止反安装时根据日志进行。不要动。NEXTBUTTON 允许/禁止“下一步”按钮,缺省是允许的。SELFREGISTERBATCH 允许/禁止批处理模式登记自动登记文件。我没有研究过。STATUS 允许/禁止显示文件复制进度条。缺省是允许。STATUSDLG 允许/禁止显示文件复制进度窗口。缺省是允许。STATUSOLD 允许/禁止显示文件老的复制进度窗口,是那种没有cancel键的那种。回页首  [返回][主页]
      

  2.   

    使用install shield制作PB6程序的安装盘 本文介绍这种PB6+Odbc+sqlany where
    情况下的安装程序的制作,这种情况是最复杂的情况,请大家支持到底需要装什么呢?(1)PB运行时刻库
        a.必要的Microsoft接口
            Msvcrt.dll
            Msvcrt40.dll
            Olepro32.dll
            这三个文件是必不可少的,而且不一定能保证被安装的机器上一定有这三个文件,所以  做安装盘时最好包含。
        b.PB运行时刻库(32位)
            pbaen60.tlb 对OLE的支持
            pbdwe60.dll 对数据窗口的支持
            pbvm60.dll PB虚拟机,一定要有
            只有三个就够了!没有想到吧?
    (2)PB与数据库客户端的专用接口或ODBC接口
        pbodb60.dll
        pbodb60.ini pb ODBC 专用接口 (sql anywhere必须装)
        pbor7360.dll pb oracle7.3 专用接口
        pbsyc60.dll pb sybasew 专用接口
        其他的我没有用过,不用都装,需要哪个就装哪个。
    (3)PB应用程序和相应的PBD或DLL
        这就是你的exe和pbd(DLL)了!
    (4)sql anywhere相应的文件
        dbeng50.exe
        dbl50t.dll
        wl50ent.dll
        wod50t.dll
        wodbc.hlp *当然可以不装拉
        wtr50t.dll
        这5个文件保证已经被创建的数据库可以正常运行
    (5)sql anywhere DB文件
        只要包含*.db就可以了,*.log不要(加上*.log有时会出问题)
    (6)帮助文件和其他文件
        怎样做hlp文件不用我告诉你吧!
    …………to be continued回页首
    使用install shield制作PB6程序的安装盘(二)
    作者:zhhz如果主机上没有装ODBC那么需要装这些文件:
        Ds16gt.dll
        Ds32gt.dll
        Odbc16gt.dll
        Odbc32.dll
        Odbc32gt.dll
        Odbcad32.exe
        Odbccp32.cpl
        Odbccp32.dll
        Odbccr32.dll
        Odbcinst.cnt *当然可以不要拉
        Odbcinst.hlp *当然可以不要拉
        Odbcint.dll
        Odbctrac.dll
        一个都不能少!    如果主机上有ODBC那你是不容易覆盖它的,如果你感觉还是自己装比较保险,可以把这些文件复制到任何一个包含在Path中的目录里所有需要的运行时刻库和文件路径都加入path中,在制作规范的安装程序时,主程序和相应的PBD(DLL)和相应的PB运行时刻库位于同一个目录里,ODBC driver和sql anywhere位于单独的目录里。千万不要混在一起,(因为太难看拉)用installshield要完成的工作1.安装界面定制
    2.文件复制
    3.更改注册表
    4.更新autoexec…………………… to be continued
    (这些库是在95;下找出来的,98下我没有是试过)回页首
    使用install shield制作PB6程序的安装盘(三)
    作者zhhz下面讲的就是如何使用installshield5东方版拉我只有这个版本,不过它支持中文,挺好的。
    如果你没有,可以试试从这down一个。ftp://202.196.64.9/pub/InstallShield/IS5EAST.exe
    ftp://202.196.64.9/pub/InstallShield/serialno.txt1)先用project WIZARD做一个新的项目
    在选择需要的对话BOX时最好全选上,这些对话BOX去好去,加就有点麻烦拉。
    安装类型中选上缺省的三种,就是compact,typical,custom,将来不要也可以删掉。
    其他都用缺省的,以后到项目里改。
    点击完成后,小功告成,现在有一个空项目拉!2)左中靠下的这些tab page是很重要的
    a、scripts ……这就是你的setup脚本,语法不知道象c还是更象pascal。scripts你是不能不接触的,否则你就只能做点小东西。is的script还是很强大的,也很有趣,在连载XXX中会讲一讲。b、component ……元件嘛,叫组件比较合适。这里定义的就是你在选择安装类型时(就是custom时)用户看到的东西,把他们改成中文吧。
    这里可以添加新的com,删除已有的com,改名字,如果你不喜欢用菜单,点点老鼠右键。
    它们的具体属性系统都有很直接的提示,自己去研究吧。
    Destination指的是文件的安装目的地,其中可以用户自定义目的,这个在在连载XXX中会讲一讲。
    有个include file group这是怎么一回事呢?c、file group ……原来是它。原来文件不是直接连接到component上,而是文件先连接到file group里,再由File group连接到component上。文件-》file group-》component。
    file group取什么名字都没有关系,在安装时用户看不到,用户只看到componentd、Setup Type ……不要改成中文名字,安装时自动变成中文的。e、resource ……里的东西是项目安装定义,不要忽视了f、Setup file ……把安装一开始的欢迎界面的bmp加进来,旧的删掉吧,其实根本不用改什么,只要把项目目录里的setup.bmp换掉就好了。其他的东西我没有研究过。g、Media ……讲不出什么,我根本没有动过它。3)好了,先编译一下吧,喂,什么都没加呢!没关系,编译一下有点成就感。用media build wizad生成安装文件,运行一下看看。…………to be continued
    (IS博大精深,我也是只知道一些皮毛,有什么需要补充的地方,请大虾抛玉)回页首
    使用install shield制作PB6程序的安装盘(四)
    作者zhhz终于要讲scripts了
    scripts可是大小写敏感的!
    “\”是转义字符,就相当与PB的“~”
    “\r\n\t”等变量类型:
    BOOL TRUE or FALSE
    CHAR 8-bit 有符号字符
    DWORD 同NUMBER
    HWND 窗口句柄(内部类型是NUMBER)
    INT 同NUMBER
    LIST 指向InstallShield list的指针(内部类型是NUMBER)
    LONG 同NUMBER
    LPSTR 同POINTER
    NUMBER 有符号4字节整数
    POINTER 指向数据的指针(如int i;p=&i)
    SHORT 同NUMBER
    STRING 字符串赔本大甩卖!
    字符串的操作:
    (1) "+" 加
    "123"+"345" = "123345" (12345)
    "\\123"+"\\345" = "\\123\\345" (\123\345)
    (2) "^" 路径加
    "123"^"345" = ".\\123\\345" (.\123\345)
    "\\123"^"345" = "\\123\\345" (\123\345)
    "\\123"^"\\345" = "\\123\\345" (\123\345)
    如果你弄不清楚,就用“+”吧
    (3) "%" str1 % str2
    if str1包含str2 then true else false
    和StrFind (str1, str2)一样1-函数(Function)***************函数(Function)
    举个例子://函数声明
    prototype RectangleArea (INT,INT);//函数体
    function RectangleArea (nLength, nWidth) //函数名
    INT nVal; //局部变量定义
    begin
    nVal = nLength * nWidth; //函数体
    return nVal;end;2-循环*******************循环
    I、for循环a、正循环
    for iCount = 1 to 10 //step 1
    MessageBox ("You'll see this 10 times", INFORMATION);endfor;b、负循环
    for j = 20 downto 10 step 5
    MessageBox ("You will see this three times", INFORMATION);
    endfor;II、repeat……until循环
    nCount = 1;
    repeat
    MessageBox("Count is less than 5", INFORMATION);
    nCount = nCount + 1;
    until (nCount = 5);III、while……endwhile循环
    nCount = 1;
    while (nCount < 5)
    MessageBox ("This is still true.", INFORMATION);
    nCount = nCount + 1;
    endwhile;3-判断**********************判断
    a、
    if (szStringA = "exit") then
    AskYesNo ( "Are you sure you want to exit?" , NO );
    endif;b、
    if (condition) then
    // statements to be executed if condition is true
    else
    // statements to be executed if condition is false
    endif;c、
    if (first condition) then
    // statements to be executed if condition is true
    elseif (second condition) then
    // statements to be executed if condition is false
    elseif (third condition) then
    // statements to be executed if third condition is false
    endif;d、
    if condition goto labelname;
    ……to be continued回页首
    使用install shield制作PB6程序的安装盘(五)
    如果转载,请注明(作者zhhz)系统变量有时候是很方便的!
    跳楼大拍卖!!!
    BATCH_INSTALL 指示当传输文件采用LOCKEDFILE或SHAREDFILE时是否锁定文件
    CMDLINE Setup.exe传递的命令行参数
    COMMONFILES Common files全路径如“c:\program file\common files”
    ERRORFILENAME
    FOLDER_DESKTOP Windows 95 或Windows NT 4.0桌面folder的路径
    FOLDER_PROGRAMS Windows 95 或Windows NT 4.0 开始菜单中开始\程序 的folder
    FOLDER_STARTMENU Windows 95 或Windows NT 4.0 开始菜单中开始 的folder
    FOLDER_STARTUP Windows 95 or Windows NT 4.0 开始菜单中启动 的folder
    INFOFILENAME InstallShield创建的备份文件全文件名
    ISRES _isres.dll全文件名
    ISUSER _isuser.dll全文件名
    ISVERSION 版本
    MEDIA 当前Media库名
    MODE 指示程序运行于normal还是silent模式
    PROGRAMFILES Windows 95 or Windows NT 4.0 “Program files” folder
    SELECTED_LANGUAGE 安装选择的语言号
    SRCDIR 安装源目录的全路径
    SRCDISK 安装源目录的盘符
    SUPPORTDIR 临时文件路径
    TARGETDIR 安装目的目录的全路径
    TARGETDISK 安装目的目录的盘符
    UNINST unInstallShield程序用的反安装文件全文件名
    WINDIR Windows的全路径(c:\windows)
    WINDISK Windows位于的盘符
    WINSYSDIR Windows\system的全路径(c:\windows\system)
    WINSYSDISK Windows\system位于的盘符………………to be continued回页首
     使用install shield制作PB6程序的安装盘(六)
    如果转载,请注明(作者zhhz)请大家支持常用的DIALOG
    最近这几篇讲SCRIPTS的不用都看,用的时候查一查就可以了。
    AskText
    AskYesNo
    MessageBox
    SdShowDlgEditx
    SdShowMsg
    SprintfBox
    SetDialogTitle
    *************所有dialog使用前,请务必将所有变量初始化!**********1、AskText (szQuestion, szDefault, svResult);
    希望用户输入一行文本,szQuestion是问题,szDefault缺省文本,svResult用户输入文本
    例:
    svResult="";
    szMsg = "请输入.";
    szDefault = "123456";
    AskText(szMsg, szDefault, svResult);2、AskYesNo (szQuestion, nDefault);
    询问dialog,nDefault为缺省TAB位置,返回YES或NO
    例:
    if (AskYesNo("YES?", YES) = YES) then
    //
    endif;3、MessageBox (szMsg, nType);
    就是MessageBox,szMsg是显示的消息
    nType:
    INFORMATION
    WARNING
    SEVERE
    例:
    szMsg = "ABCDEFG.";
    nType = WARNING;
    MessageBox(szMsg, nType );
    4、SdShowDlgEdit1 (szTitle, szMsg, szField1, svEdit1);
    SdShowDlgEdit2 (szTitle, szMsg, szField1, szField2, svEdit1, svEdit2);
    SdShowDlgEdit3 (szTitle, szMsg, szField1, szField2, szField3, svEdit1, svEdit2, svEdit3);
    有一个,两个或三个文本输入行
    例:
    szTitle = "SdShowDlgEdit2 Example";
    szMsg = "All files within the Source directory will be copied into the Target directory.";
    szField1 = "Source:";
    szField2 = "Target:";
    svEdit1 = "C:\\EXAMPLE\\SOURCE";
    svEdit2 = "C:\\EXAMPLE\\TARGET";if (SdShowDlgEdit2(szTitle, szMsg, szField1, szField2, svEdit1, svEdit2) < 0) then
    MessageBox("SdShowDlgEdit2 failed.", SEVERE);
    endif;5、SdShowMsg (szMsg, bShow);
    这是一个很好的东东,出现一个光秃秃的提示窗,没有Button和Title BAR
    例:
    szMsg = "正在更新注册表.";
    SdShowMsg(szMsg, TRUE);
    //更新注册表……………………
    SdShowMsg(szMsg, FALSE);6、SprintfBox (nType, szTitle, szFormat [,arg] [,...]);
    nType:
    INFORMATION
    WARNING
    SEVERE
    和MessageBox差不多,有人喜欢用。
    例如:
    szString = "This is a sample text string";
    nNumber = 420;
    cChar = 'P';szTitle = "SprintfBox Example";
    szFormat = "String: %s";SprintfBox(INFORMATION, szTitle, szFormat, szString);szFormat = "Number: %d";
    SprintfBox(WARNING, szTitle, szFormat, nNumber);szFormat = "Character: %c";
    SprintfBox(SEVERE, szTitle, szFormat, cChar);7、SetDialogTitle (nDialogId, szTitle);
    上面的MessageBox没有标题,怎么办?用这个!
    nDialogId:
    DLG_ASK_TEXT AskText
    DLG_ASK_YESNO AskYesNo
    DLG_MSG_INFORMATION Information-style MessageBox.
    DLG_MSG_SEVERE Severe-style MessageBox.
    DLG_STATUS Changes the title of the dialog-style progress indicator.
    DLG_MSG_WARNING Warning-style MessageBox.
    DLG_USER_CAPTION user-defined messagebox .
    例如:
    nDialogId = DLG_ASK_YESNO;
    szTitle = "SetDialogTitle Example";
    if (SetDialogTitle (nDialogId, szTitle) < 0) then
    MessageBox("SetDialogTitle failed.", SEVERE);
    else
    AskYesNo("Did SetDialogTitle change this title?", YES);
    endif;……………………to be continued回页首
    使用install shield制作PB6程序的安装盘(七)
    如果转载,请注明(作者zhhz)请大家支持越写越复杂拉!常用注册表修改函数1、RegDBSetDefaultRoot (nRootKey);
    这个函数是设置缺省注册表类,在使用读和写以前,一定要使用这个函数设置一下。
    HKEY_CLASSES_ROOT
    HKEY_LOCAL_MACHINE
    HKEY_CURRENT_USER
    HKEY_USERS2、RegDBCreateKeyEx (szKey, szClass);
    创建一个键名,没用!因为RegDBSetKeyValueEx ()会自动创建。3、RegDBSetKeyValueEx (szKey, szName, nType, szValue, nSize);
    nType
    REGDB_STRING string,不能有换行
    REGDB_STRING_EXPAND 扩充环境变量表达式,如 "%MYPATH%".
    REGDB_STRING_MULTI string,可以换行
    REGDB_NUMBER 数字,我没有用过,其实注册表里的都是字符串,还是转换成字符串吧
    REGDB_BINARY 二进制数据,先要存在string里
    设置一个键值,如果没有键名回会自动创建该键名。
    szName 键名
    szKey 键
    szValue 键值
    nSize 如果是REGDB_STRING, REGDB_STRING_EXPAND或 REGDB_NUMBER取-1
    否则大于等于最小长度
    返回0成功,<0失败4、RegDBGetKeyValueEx (szKey, szName, nvType, svValue, nvSize);
    得到一个键值
    和RegDBSetKeyValueEx差不多。
    返回0成功,<0失败还有一些delete之类和一些特殊的reg函数。一般用不到。特殊的reg函数只是简化一些操作,实现操作的这几个基本的都能实现。讲了这么多,还是不懂?举个例子:
    RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
    我写,写写写
    RegDBSetKeyValueEx ( "SOFTWARE\\Microsoft\\Internet Explorer\\Plugins\\Extension\\.pbd" , "" , REGDB_STRING , "" , -1 );
    RegDBSetKeyValueEx ( "SOFTWARE\\Microsoft\\Internet Explorer\\Plugins\\Extension\\.pbd" , "Content Type" , REGDB_STRING , "application/vnd.powerbuilder6" , -1 );
    于是:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Plugins\Extension\.pbd [缺省] = ""
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Plugins\Extension\.pbd Content Type = "application/vnd.powerbuilder6"我读,读读读
    if ( RegDBGetKeyValueEx ("Software\\Netscape\\Netscape Navigator\\Main","Install Directory" , nvType, svNetscape , nvSize )<0) then
    svNetscape=TARGETDIR;
    else
    svNetscape=svNetscape+"\\Program\\Plugins";
    endif;……………………to be continued回页首
    使用install shield制作PB6程序的安装盘(八)
    如果转载,请注明(作者zhhz)请大家支持常见需要修改注册表的情况:
    我只作过32位的,以下都是基于32位的1、安装32位ODBC for Sql Any Where
    不用修改
    真是猪,没有你说什么!不怪我拉,因为就是不用拉!2、安装SQL anywhere的DB
    都加上全路径,避免...
    svDBprofile = "LAW"; //数据库别名,就是在PB连接串中的那个
    svDB = TARGETDIR+"\\db\\law.db";//law.db的全名
    svWod50t = TARGETDIR+"\\sqlany50\\wod50t.dll";//wod50t.dll的全名
    svStart = TARGETDIR+"\\sqlany50\\dbeng50 -Q";//dbeng50.exe的...,注意不要加上.exe,"-Q"表示不要那个讨厌的sqlanywhere窗口跑出来。RegDBSetDefaultRoot ( HKEY_CURRENT_USER );
    RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile , "AutoStop" , REGDB_STRING , "YES" , -1 );//不用改
    RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile , "DatabaseFile" , REGDB_STRING , svDB , -1 );
    RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile , "DatabaseName" , REGDB_STRING , svDBprofile , -1 );
    RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile , "Driver" , REGDB_STRING , svWod50t , -1 );
    RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile , "PWD" , REGDB_STRING ,"sql" , -1 );//不用改
    RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile , "UID" , REGDB_STRING ,"dba" , -1 );//不用改
    RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile , "Start" , REGDB_STRING , svStart, -1 );3、安装PB的window plugin (also for IE4.0)
    RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
    svPath="c:\\Program Files\\Internet Explorer\\plugins\\nppba60.dll";LongPathToShortPath ( svPath );
    RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
    RegDBSetKeyValueEx ( "SOFTWARE\\Microsoft\\Internet Explorer\\Plugins\\Extension\\.pbd" , "" , REGDB_STRING , "" , -1 );
    RegDBSetKeyValueEx ( "SOFTWARE\\Microsoft\\Internet Explorer\\Plugins\\Extension\\.pbd" , "Content Type" , REGDB_STRING , "application/vnd.powerbuilder6" , -1 );
    RegDBSetKeyValueEx ( "SOFTWARE\\Microsoft\\Internet Explorer\\Plugins\\Extension\\.pbd" , "Location" , REGDB_STRING , svPath , -1 );
    RegDBSetKeyValueEx ( "SOFTWARE\\Microsoft\\Internet Explorer\\Plugins\\Extension\\.pbd" , "Version" , REGDB_STRING , "6.5.00.444" , -1 );
    RegDBSetKeyValueEx ( "SOFTWARE\\Microsoft\\Internet Explorer\\Plugins\\MIME\\application/vnd.powerbuilder" , "Extension" , REGDB_STRING , ".pbd" , -1 );
    RegDBSetKeyValueEx ( "SOFTWARE\\Microsoft\\Internet Explorer\\Plugins\\MIME\\application/vnd.powerbuilder6" , "Extension" , REGDB_STRING , ".pbd" , -1 );RegDBSetDefaultRoot ( HKEY_CLASSES_ROOT );
    RegDBSetKeyValueEx ( ".pbd" , "" , REGDB_STRING , "PowerBuilder.Application" , -1 );
    RegDBSetKeyValueEx ( ".pbd" , "Content Type" , REGDB_STRING , "application/vnd.powerbuilder" , -1 );
    RegDBSetKeyValueEx ( "MIME\\Database" , "Content Type" , REGDB_STRING , "application/vnd.powerbuilder" , -1 );4、//注册Access数据库
    ////////////////////////////////////////////////////////////
    RegDBSetDefaultRoot ( HKEY_CURRENT_USER );
    svDB="SOFTWARE\\ODBC\\ODBC.INI\\"+"LAW";
    svDBFile = TARGETDIR+"\\db\\law.mdb";//law.db的全名
    szDriver = WINSYSDIR+"\\odbcjt32.dll"
    RegDBSetKeyValueEx ( svDB , "DBQ" , REGDB_STRING , svDBFile , -1 );
    RegDBSetKeyValueEx ( svDB , "Driver" , REGDB_STRING , szDriver , -1 );
    RegDBSetKeyValueEx ( svDB , "FIL" , REGDB_STRING , "MS Access;" , -1 );
    RegDBSetKeyValueEx ( svDB , "DriverId" , REGDB_STRING , "25" , -1 );
    RegDBSetKeyValueEx ( svDB , "SafeTransactions" , REGDB_STRING , "0" , -1 );
    RegDBSetKeyValueEx ( svDB , "UID" , REGDB_STRING , "" , -1 );RegDBSetKeyValueEx ( svDB +"\\Engines\\jet" , "ImplicitCommitSync" , REGDB_STRING , "Yes" , -1 );
    RegDBSetKeyValueEx ( svDB +"\\Engines\\jet", "UserCommitSync" , REGDB_STRING , "Yes" , -1 );
    RegDBSetKeyValueEx ( svDB +"\\Engines\\jet", "MaxBufferSize" , REGDB_STRING , "512" , -1 );
    RegDBSetKeyValueEx ( svDB +"\\Engines\\jet" , "PageTimeout" , REGDB_STRING , "5" , -1);
    RegDBSetKeyValueEx ( svDB +"\\Engines\\jet", "Threads" , REGDB_NUMBER , "3" , -1 );
    这个我没有试过,也不知道行不行。应该差不多吧!5、在注册表里添路径,例如
    RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
    RegDBSetKeyValueEx ( "Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\" , "Myexe.exe" , REGDB_STRING , TARGETDIR + "\\Myexe.exe" ,-1 );
    我不喜欢这样做,喜欢把路径加入autoexec的Path里。………………………………to be continued回页首
    使用install shield制作PB6程序的安装盘(九)
    如果转载,请注明(作者zhhz)请大家支持在scripts里点右键,会出现function wizard的选项,试一试,很好用的。
    改写Autoexec中的Path改写Path相关的文件操作FindFile 看看文件是否存在
    CreateFile 创建文件
    OpenFileMode //打开模式
    OpenFile //打开文件
    WriteLine //写一行OpenFileMode(FILE_MODE_APPEND);if (FindFile("c:\\", "autoexec.bat", svResult) < 0) then //没有,需要create一个
    CreateFile(nvFileHandle, "c:\\","autoexec.bat" );
    else //有拉,打开他
    OpenFile ( nvFileHandle , "C:\\" , "Autoexec.bat" );
    endif;LongPathToQuote (svDir , TRUE );//如果是长文件名,要加上引号,否则PATH不认的!
    //如path=c:\program file;c:\windows一定会出错,应该写成path="c:\program file";c:\windows
    //非长文件名加不加都没有关系WriteLine( nvFileHandle," ");
    WriteLine( nvFileHandle,"REM ********ADD BY myexe********");
    WriteLine( nvFileHandle ,"Set PATH=" +svDir +";%PATH%"); //加全!!一般来说只有一个work DIR是not enough的
    WriteLine( nvFileHandle,"REM ********END OF myexe********");
    WriteLine( nvFileHandle," ");
    CloseFile(nvFileHandle);…………to be continued回页首
    使用install shield制作PB6程序的安装盘(十)
    如果转载,请注明(作者zhhz)请大家支持在桌面和开始菜单中添加快捷方式:都用一个函数,就是:
    AddFolderIcon (szProgramFolder, szItemName, szCommandLine, szWorkingDir, szIconPath, nIcon, szShortCutKey, nFlag);参数:1)szProgramFolder
    FOLDER_DESKTOP
    FOLDER_STARTMENU
    FOLDER_STARTUP
    FOLDER_PROGRAMS
    或者
    FOLDER_STARTMENU ^ "ACCESSORIES\\GAMES"
    等等
    现在发现系统变量的好处了吧!参见“使用install shield制作PB6程序的安装盘(五)”2)szItemName
    快捷方式的名字,在Windows 95 和 Windows NT 4.0没有特别的限制
    这些“/ \ : ? < > |”是不能用的3)szCommandLine
    一般来讲就是文件全名。后面也可以带命令行参数,比如:"C:\myexe\myexe.exe -a",引号加不加我忘拉,你试试吧!
    文件不一定是.exe,任何注册了的东东都可以,比如.txt , .htm , .gif 等等一般来说,这个命令是反安装命令。
    C:\WINDOWS\IsUn0804.exe -f"C:\myexe\Uninst.isu"4)szWorkingDir
    工作路径,一般用""5)szIconPath
    需要显示的icon文件名6)nIcon
    图标号,从0开始,0,1,2,3,……,使用应用程序自带的图标取0就可以拉7)szShortCutKey
    快捷键,比如想输入"Ctrl + F8"就蹦出来。
    注意,当快捷键和系统冲突时,自动无效。
    一般允许的是" Ctrl + Alt + "+key
    例如 "Ctrl + Alt + F8"
    或 "Ctrl + Alt + K"
    "Alt + "key 好象不行,
    "Ctrl + "key 可能可以8)nFlag 可以或操作
    REPLACE 如果原来有,就替代它
    RUN_MAXIMIZED 运行时最大化
    RUN_MINIMIZED 运行时最小化
    NULL 以上一个都不要注释:
    szCommandLine中如果应用程序名是长文件名,必须用引号(单双都行)引起来,文件名是变量的话就用LongPathToQuote函数做一下。
    szWorkingDir 和szIconPath不要用LongPathToQuote函数做,InstallShield自动会处理,还是用""比较好!
    LongPathToQuote就是------------长文件名加引号!这么简单还要问!例子:
    svResult ="";
    if (FindFile (svDir, "XTGL.EXE" , svResult )=0) then //先找一下,因为有可能用户没有选这个部件
    svPath = TARGETDIR ^ "xtgl.exe";
    LongPathToQuote ( svPath , TRUE ); //很有必要的
    AddFolderIcon ( FOLDER_PROGRAMS ^ "我的应用", "系统管理" , svPath , "" , "" , 0 , "" , REPLACE ); //在开始菜单->我的应用->系统管理
    AddFolderIcon ( FOLDER_DESKTOP , "系统管理" , svPath , "" , "" , 0 , "Ctrl + Alt + K", REPLACE ); //在桌面上加一个,带快捷键耶!
    endif;下面就是自动反安装,没有必要也装到桌面上吧!
    svPath = TARGETDIR ^ UNINST_LOGFILE_NAME; //UNINST_LOGFILE_NAME一般在scripts一开始就定义为:#define UNINST_LOGFILE_NAME "Uninst.isu"
    LongPathToQuote ( svPath , TRUE );
    AddFolderIcon ( FOLDER_PROGRAMS ^"我的应用" , "卸载" , "c:\\windows\\IsUn0804.exe -f"+svPath ,"" , "" , 0 , "" , REPLACE );
    ……………………TO BE CONTINUED回页首
    使用install shield制作PB6程序的安装盘(十一)
    如果转载,请注明(作者zhhz)请大家支持请注意,这并不只是在翻译文档,其中被我组织和编辑过,并且有我的一些见解(哈,不一定对)。用户接口函数是一些比较低层的函数,例如FindWindow,
    用户接口函数有时候是很有用的,比如要在背景上放AVI,
    但是这些是可要可不要的。然而用户接口Enable (nConstant)和Disable (nConstant)是很重要的,不得不用nConstant的参数:
    BACKBUTTON 允许/禁止“后退”按钮,缺省是允许的。BACKGROUND 允许/禁止显示主背景窗口。缺省是允许。
    在自动生成的SCRIPTS里,第一行就有 Disable( BACKGROUND ),这是为了防止SetupInstall()造成的闪烁。不信你把它去掉试试。BACKGROUNDCAPTION 允许/禁止显示主背景窗口标题栏。全屏时没用,缺省是允许。BITMAP256COLORS 允许/禁止256色模式,在PlaceBitmap里用CORECOMPONENTHANDLING 允许/禁止中心组件标识。有些文件是和注册表相关的,如ACTIVE X,假设以前有,反装时去掉了这种关联,那么别的程序也不能用拉。如果enable,所有在Corecomp.ini中定义的文件都不会被标识。
    16位系统和winnt3.5不支持。DEFWINDOWMODE 允许/禁止安装运行于窗口模式。DIALOGCACHE 允许/禁止窗口缓冲技术,可以减少屏幕闪烁。缺省是禁止。FEEDBACK_FULL 允许/禁止显示进度标尺。当“文件复制”条显示时,自动就显示进度尺了。进度尺就是那个百分之多少多少的东东。FULLWINDOWMODE 允许/禁止背景窗口处于全屏模式。缺省是允许。HOURGLASS 允许/禁止鼠标指针为沙漏形状INDVFILESTATUS 允许/禁止文件拷贝进度,就是显示“copying myexe.exe to c:\myexe\myexe.exe ”,缺省是禁止,快打开吧!LOGGING 允许/禁止反安装时根据日志进行。不要动。NEXTBUTTON 允许/禁止“下一步”按钮,缺省是允许的。SELFREGISTERBATCH 允许/禁止批处理模式登记自动登记文件。我没有研究过。STATUS 允许/禁止显示文件复制进度条。缺省是允许。STATUSDLG 允许/禁止显示文件复制进度窗口。缺省是允许。STATUSOLD 允许/禁止显示文件老的复制进度窗口,是那种没有cancel键的那种。