• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 131, comments - 12, trackbacks - 0, articles - 0
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            使用InstallShield 2009的筆記

            Posted on 2012-11-07 14:54 盛勝 閱讀(336) 評(píng)論(0)  編輯 收藏 引用

            步驟

            1. 開(kāi)始

               網(wǎng)上說(shuō)一般的打包工程選擇Basic MSI Project,如果需要對(duì)界面需要進(jìn)行很高的定制就需要選擇InstallScript MSI Project。

            由于我只需要打包,已經(jīng)執(zhí)行部分腳本因此我選擇了Basic MSI Project。輸入Project Name,選擇Location后點(diǎn)擊OK,新建工程。

            進(jìn)入到下圖界面,此時(shí)我們可以選擇兩種打包方式(紅框處選擇)

            1.Project Assistant   可以進(jìn)行簡(jiǎn)單的類似向?qū)ь惖呐渲眉纯蛇M(jìn)行打包工作,如果選擇這種方式,Visual Studio自帶的工具也能輕松實(shí)現(xiàn)

            2.Installation Designer 完全自由化的配置,自我定制程度最高。

            根據(jù)需求情況,我自然選擇第二種方式

            2.配置

            點(diǎn)選Installation Designer,進(jìn)入如下界面

            image

            紅框處就是需要選擇配置的區(qū)域了。

             

            2.1 General Information

            在Installation Information中選擇General Information,在這里配置軟件的基本信息

            image

            紅線處你可以寫(xiě)上你的大名,你是這個(gè)Project的作者

            下面的Setup Langueages可以選擇安裝語(yǔ)言,我這里只考慮了簡(jiǎn)體中文,故未更改設(shè)置。

            R0(NKEJLG6%FKR7[GF~[6EI

            紅框里填寫(xiě)上你公司的名字和網(wǎng)址,我舉個(gè)例子才寫(xiě)的這兩個(gè)

            image

            在Product Properties中填入軟件的信息,軟件的名字、版本什么的。

            INSTALLDIR是指安裝目錄,圖中的配置方法默認(rèn)是指這個(gè)路徑: C:/Program Files/Transformers/Demo

             

            2.2 Files

            003 File and Folders

            右邊的區(qū)域被分成了四塊,上面兩塊是本地計(jì)算機(jī),下面兩塊是目標(biāo)計(jì)算機(jī)

            總的思路跟資源管理一樣,這里你就可以按照你自己的思路來(lái)定制了

            舉個(gè)列子,我隨便找點(diǎn)東西打包

            在Destination computer’s folders中把樹(shù)展開(kāi),選中Demo[INSTALLDIR],這是什么東西相信看看就明白了,如果不明白的話那就需要再學(xué)習(xí)下基礎(chǔ)知識(shí)了。

            從Source computer‘s files(本地計(jì)算機(jī))中拖動(dòng)一些文件到Destination computer’s files中,就會(huì)彈出如下提示

            image

            你需要?jiǎng)?chuàng)建一個(gè)Feature,什么是Feature我不太清楚,我把它理解成一個(gè)文件的集合。輸入名字,我輸入的是Main,點(diǎn)擊OK

            image

            (如果你看不到上圖中左邊紅框內(nèi)的東西,就在那里的樹(shù)狀結(jié)構(gòu)任意節(jié)點(diǎn)點(diǎn)擊右鍵,勾選Show Components就能看到了)

            當(dāng)你把你想打包的東西添加進(jìn)入過(guò)后,一個(gè)最基本的包就打好了,已經(jīng)可以編譯執(zhí)行嘗試安裝了。

            image

            工具欄上的圖標(biāo)編譯跟執(zhí)行跟VC++6.0的圖標(biāo)是一樣的吧,第三個(gè)紅圈就是卸載

             

            當(dāng)然只做到這一步是不能滿足我的需求的,我還需要添加一個(gè)數(shù)據(jù)庫(kù)文件夾,在Demo[INSTALLDIR]上點(diǎn)擊右鍵——選擇New Folder——命名為Database

            進(jìn)行圖中操作

            image

            直接點(diǎn)擊下一步,到第二步,按圖中操作

            image

            再下一步,將數(shù)據(jù)庫(kù)相關(guān)文件都添加進(jìn)去,當(dāng)然你可以先添加一個(gè)文件(夾)進(jìn)去,其余的在“Files and Folders”中繼續(xù)添加。

            至此,數(shù)據(jù)庫(kù)文件也添加到了安裝包內(nèi),不過(guò)默認(rèn)的安裝流程中只有選擇主程序的安裝路徑?jīng)]有選擇數(shù)據(jù)庫(kù)的路徑,因此需要手動(dòng)添加。

            方法見(jiàn)2.3

             

            2.3 Sequences

            大家應(yīng)該都安裝過(guò)軟件,最菜的人也知道一路點(diǎn)擊“下一步”來(lái)安裝程序。這部分就講一下如何定制安裝的順序,就是“上一步”與“下一步”的跳轉(zhuǎn)。

            image

            最左邊選擇Custom Actions and Sequences后,在中間的樹(shù)中如圖操作,User Interface上點(diǎn)擊右鍵——Insert…

            image

            點(diǎn)擊OK后Sequences樹(shù)中多了個(gè)DatabaseFolder,可以拖動(dòng)他到想要的位置。

            當(dāng)然Sequences的編輯還沒(méi)那么簡(jiǎn)單,貌似通過(guò)拖動(dòng)無(wú)法實(shí)現(xiàn),需要對(duì)每個(gè)窗體進(jìn)行編輯。

            image

            如圖所示,圖中的意思就是在選擇DatabaseFolder的路徑的對(duì)話框中,點(diǎn)擊“上一步”按鈕會(huì)跳轉(zhuǎn)到CustomerInformation這個(gè)對(duì)話框中

            就是這樣編輯,工作量也不小,或者是有其他什么簡(jiǎn)便方法,可是我不知道

             

            2.4 動(dòng)態(tài)修改XML或者INI文件

            在這個(gè)項(xiàng)目中,我需要將項(xiàng)目的安裝路徑寫(xiě)在安裝目錄下的一個(gè)ini文件中,這個(gè)ini文件是需要打包在項(xiàng)目中的。

            image

            首先確保ini文件已經(jīng)添加進(jìn)入打包工程。

            image

            在INI File Changes中新建一個(gè)與欲改寫(xiě)的ini文件同名的ini文件——my.ini

            在my.ini文件下建立欲改寫(xiě)的section(我的例子是installdir)以及keyword(例子中是dir),編輯keword

            在Data Value中寫(xiě)入系統(tǒng)變量[INSTALLDIR],這個(gè)就表示程序的安裝目錄。如果要獲取數(shù)據(jù)庫(kù)的安裝目錄就可以寫(xiě)入[DATABASEDIR]

            XML的修改跟這個(gè)類似,相信都可以融會(huì)貫通。

            在我的實(shí)際項(xiàng)目中,遇到個(gè)問(wèn)題。

            my.ini是mysql要用到的東西,是放在數(shù)據(jù)庫(kù)目錄中的,安裝上面的方法略加修改就可以實(shí)現(xiàn)。

            但是mysql需要的路徑類似于C:/MyDataBase/MySql/

            而通過(guò)我上面方法[DATABASEDIR]獲得的路徑是Windows標(biāo)準(zhǔn)的 C:/MyDataBase/MySql/

            因此我必須要把這個(gè)斜線給反過(guò)來(lái),我不知道怎么反。只知道可能通過(guò)腳本來(lái)修改(如果有高人知道簡(jiǎn)便方法,請(qǐng)指點(diǎn))

            腳本見(jiàn)2.5

             

            2.5 InstallScript

             

            剛剛接觸,我連在哪里寫(xiě)腳本都不知道,跟別說(shuō)如何寫(xiě)腳本了,雖然我現(xiàn)在也不會(huì)寫(xiě)腳本~~(求教啊)

            雖然還不會(huì)寫(xiě)腳本,還是先把在哪里寫(xiě)以及如何運(yùn)行腳本寫(xiě)出來(lái),希望有跟我有同樣問(wèn)題的朋友看到。

            image

            然后出現(xiàn)下圖

            image

            右邊是編輯區(qū),用于寫(xiě)腳本。有編程經(jīng)驗(yàn)的話這個(gè)不難理解

            腳本的執(zhí)行回到Custom Actions and Sequences,在中間的列表中的Custom Actions上點(diǎn)擊右鍵,選擇Custom Actions Wizard

            在Action Type中選擇Run InstallScript code,在Insert into Sequence中的Install Execute Sequence處選擇何時(shí)執(zhí)行,其余按向?qū)崾静僮鳌?/p>

            #include "ifx.h"
              
                export prototype ProcessAfterDataMove(HWND);  
                export prototype STRING ReplaceStr(STRING);    
                export prototype RunBat(STRING);

            function ProcessAfterDataMove(hMSI)  
               STRING P_Dir,DB_Dir; // P_Dir是主程序目錄下ini文件的路徑,DB_Dir是數(shù)據(jù)庫(kù)的路徑
            begin            
               P_Dir = TARGETDIR "temp.ini"//TARGETDIR是系統(tǒng)變量,存放安裝路徑
               //GetProfString()函數(shù)是系統(tǒng)函數(shù),用于讀取ini文件中的信息
               //第一個(gè)參數(shù)指定文件所在路徑
               //第二個(gè)參數(shù)指定section名
               //第三個(gè)參數(shù)指定keyword名
               //最后一個(gè)參數(shù)用于 返回 前面指定的keyword的值。注意:是返回!  
               GetProfString (P_Dir, "temp""dir", DB_Dir);
               //ReplaceProfString()函數(shù)是系統(tǒng)函數(shù),用于修改ini文件中keyword的值
               //第一個(gè)參數(shù)指定文件所在路徑
               //第二個(gè)參數(shù)指定section名
               //第三個(gè)參數(shù)指定keyword名
               //第四個(gè)參數(shù)指定keyword原值
               //第五個(gè)參數(shù)指定keyword的新值
               //只有前面4個(gè)條件完全匹配時(shí),原值才會(huì)被第五個(gè)參數(shù)中的新值替換                                                                                         
               ReplaceProfString (DB_Dir + "my.ini""mysqld""basedir""/"" + DB_Dir + "/"""/"" + ReplaceStr(DB_Dir) + "/"");
               ReplaceProfString (DB_Dir + "my.ini""mysqld", "datadir""/"" + DB_Dir + "Data/"", "/"" + ReplaceStr(DB_Dir + "Data") + "/"");
               //執(zhí)行批處理
               RunBat(DB_Dir);
            end;  
                   
            function STRING ReplaceStr(Str)
            LIST StrList;
            STRING temp,path;
            begin
            //創(chuàng)建List存放Tokens
               StrList = ListCreate(STRINGLIST);
            //分解出Token存入List
               StrGetTokens( StrList, Str, "http://");
               //取出TokenList的頭節(jié)點(diǎn)
               ListGetFirstString(StrList, temp);
               //頭節(jié)點(diǎn)后加入 “/”
               path = temp + "/";
               //循環(huán) 取出所有的節(jié)點(diǎn) 后面加入“/”
               while(ListGetNextString(StrList, temp) = 0)
                   path = path + temp + "/";
               endwhile;
            return path;   
            end;       
                   
                   
            function RunBat(DB_Dir)     //執(zhí)行批處理     
            STRING dir;              
            begin
            dir = DB_Dir + "bin//exec.bat" ;
            //調(diào)用其他程序
            //第一個(gè)參數(shù)是調(diào)用程序的位置
            //第二個(gè)參數(shù)是調(diào)用程序運(yùn)行所需參數(shù)
            //WAIT表示等到執(zhí)行完畢這個(gè)程序,安裝再繼續(xù)進(jìn)行
            LaunchAppAndWait(dir, "",WAIT);
            end;


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久久精品国产免大香伊| 精品久久8x国产免费观看| 久久久久亚洲av成人网人人软件| 久久只有这精品99| 国产精品久久久久久福利69堂| 91久久精品国产成人久久| 国产精品久久久久久五月尺| 97久久久久人妻精品专区| 日日狠狠久久偷偷色综合96蜜桃 | 无码超乳爆乳中文字幕久久| 国产精品美女久久久m| 色婷婷狠狠久久综合五月| 亚洲国产成人久久精品影视| 伊人久久大香线焦AV综合影院| 久久精品国产72国产精福利| 久久香蕉国产线看观看精品yw| 亚洲国产成人久久综合野外| 91亚洲国产成人久久精品网址| 中文字幕人妻色偷偷久久| 亚洲AV伊人久久青青草原| 99久久夜色精品国产网站| 国产99久久精品一区二区| 亚洲AV无码久久精品蜜桃| 国产69精品久久久久观看软件| 久久久久国产精品麻豆AR影院| 久久精品免费一区二区三区| 久久黄色视频| 欧美一区二区三区久久综| 久久成人小视频| 无码乱码观看精品久久| 久久国产精品二国产精品| 久久精品国产99国产电影网| 久久久久久久久久久久中文字幕| 欧美国产成人久久精品| 狠狠色丁香婷婷久久综合| 最新久久免费视频| 无码人妻少妇久久中文字幕| 无码乱码观看精品久久| 亚洲国产成人久久综合碰| 怡红院日本一道日本久久| 一级做a爰片久久毛片16|