青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 131, comments - 12, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

使用InstallShield 2009的筆記

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

步驟

1. 開始

   網上說一般的打包工程選擇Basic MSI Project,如果需要對界面需要進行很高的定制就需要選擇InstallScript MSI Project。

由于我只需要打包,已經執行部分腳本因此我選擇了Basic MSI Project。輸入Project Name,選擇Location后點擊OK,新建工程。

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

1.Project Assistant   可以進行簡單的類似向導類的配置即可進行打包工作,如果選擇這種方式,Visual Studio自帶的工具也能輕松實現

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

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

2.配置

點選Installation Designer,進入如下界面

image

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

 

2.1 General Information

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

image

紅線處你可以寫上你的大名,你是這個Project的作者

下面的Setup Langueages可以選擇安裝語言,我這里只考慮了簡體中文,故未更改設置。

R0(NKEJLG6%FKR7[GF~[6EI

紅框里填寫上你公司的名字和網址,我舉個例子才寫的這兩個

image

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

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

 

2.2 Files

003 File and Folders

右邊的區域被分成了四塊,上面兩塊是本地計算機,下面兩塊是目標計算機

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

舉個列子,我隨便找點東西打包

在Destination computer’s folders中把樹展開,選中Demo[INSTALLDIR],這是什么東西相信看看就明白了,如果不明白的話那就需要再學習下基礎知識了。

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

image

你需要創建一個Feature,什么是Feature我不太清楚,我把它理解成一個文件的集合。輸入名字,我輸入的是Main,點擊OK

image

(如果你看不到上圖中左邊紅框內的東西,就在那里的樹狀結構任意節點點擊右鍵,勾選Show Components就能看到了)

當你把你想打包的東西添加進入過后,一個最基本的包就打好了,已經可以編譯執行嘗試安裝了。

image

工具欄上的圖標編譯跟執行跟VC++6.0的圖標是一樣的吧,第三個紅圈就是卸載

 

當然只做到這一步是不能滿足我的需求的,我還需要添加一個數據庫文件夾,在Demo[INSTALLDIR]上點擊右鍵——選擇New Folder——命名為Database

進行圖中操作

image

直接點擊下一步,到第二步,按圖中操作

image

再下一步,將數據庫相關文件都添加進去,當然你可以先添加一個文件(夾)進去,其余的在“Files and Folders”中繼續添加。

至此,數據庫文件也添加到了安裝包內,不過默認的安裝流程中只有選擇主程序的安裝路徑沒有選擇數據庫的路徑,因此需要手動添加。

方法見2.3

 

2.3 Sequences

大家應該都安裝過軟件,最菜的人也知道一路點擊“下一步”來安裝程序。這部分就講一下如何定制安裝的順序,就是“上一步”與“下一步”的跳轉。

image

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

image

點擊OK后Sequences樹中多了個DatabaseFolder,可以拖動他到想要的位置。

當然Sequences的編輯還沒那么簡單,貌似通過拖動無法實現,需要對每個窗體進行編輯。

image

如圖所示,圖中的意思就是在選擇DatabaseFolder的路徑的對話框中,點擊“上一步”按鈕會跳轉到CustomerInformation這個對話框中

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

 

2.4 動態修改XML或者INI文件

在這個項目中,我需要將項目的安裝路徑寫在安裝目錄下的一個ini文件中,這個ini文件是需要打包在項目中的。

image

首先確保ini文件已經添加進入打包工程。

image

在INI File Changes中新建一個與欲改寫的ini文件同名的ini文件——my.ini

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

在Data Value中寫入系統變量[INSTALLDIR],這個就表示程序的安裝目錄。如果要獲取數據庫的安裝目錄就可以寫入[DATABASEDIR]

XML的修改跟這個類似,相信都可以融會貫通。

在我的實際項目中,遇到個問題。

my.ini是mysql要用到的東西,是放在數據庫目錄中的,安裝上面的方法略加修改就可以實現。

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

而通過我上面方法[DATABASEDIR]獲得的路徑是Windows標準的 C:/MyDataBase/MySql/

因此我必須要把這個斜線給反過來,我不知道怎么反。只知道可能通過腳本來修改(如果有高人知道簡便方法,請指點)

腳本見2.5

 

2.5 InstallScript

 

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

雖然還不會寫腳本,還是先把在哪里寫以及如何運行腳本寫出來,希望有跟我有同樣問題的朋友看到。

image

然后出現下圖

image

右邊是編輯區,用于寫腳本。有編程經驗的話這個不難理解

腳本的執行回到Custom Actions and Sequences,在中間的列表中的Custom Actions上點擊右鍵,選擇Custom Actions Wizard

在Action Type中選擇Run InstallScript code,在Insert into Sequence中的Install Execute Sequence處選擇何時執行,其余按向導提示操作。


#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是數據庫的路徑
begin            
   P_Dir = TARGETDIR "temp.ini"//TARGETDIR是系統變量,存放安裝路徑
   //GetProfString()函數是系統函數,用于讀取ini文件中的信息
   //第一個參數指定文件所在路徑
   //第二個參數指定section名
   //第三個參數指定keyword名
   //最后一個參數用于 返回 前面指定的keyword的值。注意:是返回!  
   GetProfString (P_Dir, "temp""dir", DB_Dir);
   //ReplaceProfString()函數是系統函數,用于修改ini文件中keyword的值
   //第一個參數指定文件所在路徑
   //第二個參數指定section名
   //第三個參數指定keyword名
   //第四個參數指定keyword原值
   //第五個參數指定keyword的新值
   //只有前面4個條件完全匹配時,原值才會被第五個參數中的新值替換                                                                                         
   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") + "/"");
   //執行批處理
   RunBat(DB_Dir);
end;  
       
function STRING ReplaceStr(Str)
LIST StrList;
STRING temp,path;
begin
//創建List存放Tokens
   StrList = ListCreate(STRINGLIST);
//分解出Token存入List
   StrGetTokens( StrList, Str, "http://");
   //取出TokenList的頭節點
   ListGetFirstString(StrList, temp);
   //頭節點后加入 “/”
   path = temp + "/";
   //循環 取出所有的節點 后面加入“/”
   while(ListGetNextString(StrList, temp) = 0)
       path = path + temp + "/";
   endwhile;
return path;   
end;       
       
       
function RunBat(DB_Dir)     //執行批處理     
STRING dir;              
begin
dir = DB_Dir + "bin//exec.bat" ;
//調用其他程序
//第一個參數是調用程序的位置
//第二個參數是調用程序運行所需參數
//WAIT表示等到執行完畢這個程序,安裝再繼續進行
LaunchAppAndWait(dir, "",WAIT);
end;
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美在线关看| 欧美性事在线| 一二三区精品| 一本大道久久a久久综合婷婷| 亚洲成人在线网| 免费观看日韩| 亚洲电影在线免费观看| 亚洲人精品午夜| 在线欧美视频| 亚洲国产成人精品视频| 亚洲精品乱码| 欧美一区二区三区日韩视频| 久久亚洲一区二区| 亚洲人成高清| 午夜在线a亚洲v天堂网2018| 久久综合九九| 欧美日韩视频免费播放| 国产亚洲午夜| 亚洲私人影吧| 免费日韩成人| 中文网丁香综合网| 另类图片综合电影| 国产精品私房写真福利视频| 在线看国产日韩| 亚洲一级影院| 欧美成人中文| 欧美伊人久久久久久午夜久久久久 | 国产精品三级视频| 亚洲观看高清完整版在线观看| 亚洲午夜91| 亚洲欧美视频在线观看视频| 欧美bbbxxxxx| 亚洲一区二区三区视频播放| 免费欧美在线视频| 国产日韩精品一区二区| 日韩网站在线| 亚洲一区999| 性亚洲最疯狂xxxx高清| 欧美精品在线一区二区| 激情91久久| 午夜在线视频观看日韩17c| 欧美激情一级片一区二区| 西西裸体人体做爰大胆久久久| 欧美精品乱码久久久久久按摩| 一区免费观看视频| 欧美在线观看www| 一区二区三区视频观看| 欧美精品在线一区| 尤物精品国产第一福利三区| 欧美在线观看一区| 亚洲一区二区三区午夜| 国产精品白丝黑袜喷水久久久| 日韩午夜一区| 亚洲精品一区二区三区不| 欧美激情国产高清| 日韩网站在线观看| 亚洲精品久久视频| 欧美日韩一区二区视频在线观看 | 午夜一区不卡| 国产精品视频一| 国产一区二区三区久久久久久久久| 亚洲黄色免费电影| 亚洲黄色性网站| 久久亚洲综合色一区二区三区| 国产一区二区三区久久悠悠色av| 欧美有码在线观看视频| 亚洲欧美日韩综合国产aⅴ| 国产精品黄色在线观看| 亚洲一区二区三区四区视频| 99精品国产99久久久久久福利| 欧美人与禽猛交乱配视频| 亚洲美女色禁图| 亚洲美女精品久久| 另类尿喷潮videofree| 久久综合一区二区| 久久综合中文色婷婷| 亚洲电影免费在线观看| 欧美激情一区在线观看| 欧美极品aⅴ影院| 亚洲一二区在线| 亚洲欧洲av一区二区三区久久| 国产欧美精品一区二区三区介绍| 久久精品视频在线| 老司机成人网| 亚洲一区二区三区在线观看视频 | 久久久久久久网站| 亚洲精品国精品久久99热| 亚洲破处大片| 国产区二精品视| 亚洲高清一区二| 国产精品久久久久高潮| 米奇777超碰欧美日韩亚洲| 欧美黄色大片网站| 欧美综合77777色婷婷| 欧美在线地址| 欧美丰满高潮xxxx喷水动漫| 亚洲一区免费看| 久久精品av麻豆的观看方式| 亚洲精品综合精品自拍| 亚洲一区二区三区影院| 亚洲高清不卡在线| 中文高清一区| 亚洲人成亚洲人成在线观看图片| 一本久道久久久| 亚洲高清免费视频| 亚洲一区在线观看视频 | 99一区二区| 国产一本一道久久香蕉| 91久久精品www人人做人人爽| 国产精品每日更新在线播放网址| 久久午夜国产精品| 国产精品家教| 亚洲精品久久久久久久久久久久久 | 久久精品123| 亚洲综合成人婷婷小说| 美女爽到呻吟久久久久| 久久本道综合色狠狠五月| 欧美精品一区二区三区蜜桃 | 亚洲一区二区在线看| 久久这里有精品视频| 久久av一区二区三区漫画| 欧美精品色一区二区三区| 久久夜色精品国产噜噜av| 中日韩在线视频| 欧美精品午夜视频| 牛牛影视久久网| 国产主播一区二区三区四区| 亚洲一区二区三区在线| av成人手机在线| 欧美精品一区二区视频| 亚洲国产91精品在线观看| 国产综合18久久久久久| 欧美在线在线| 久久精品国产综合| 国产性猛交xxxx免费看久久| 亚洲欧美视频在线观看| 亚洲欧美日韩天堂| 国产精品婷婷| 一区二区三区欧美日韩| 亚洲一区二区精品| 欧美婷婷久久| 亚洲一二三区在线| 欧美一区二区三区四区视频 | 国产精品亚洲а∨天堂免在线| 99pao成人国产永久免费视频| 亚洲国产欧美日韩精品| 老色鬼久久亚洲一区二区| 男人插女人欧美| 亚洲精选久久| 欧美视频一区二区三区…| 中文日韩电影网站| 欧美亚洲综合久久| 国产在线播精品第三| 一区二区三区日韩| 欧美视频一区在线观看| 午夜精品视频在线观看| 久久久久欧美精品| 亚洲人午夜精品免费| aaa亚洲精品一二三区| 欧美一激情一区二区三区| 欧美成人黑人xx视频免费观看| 国产视频在线观看一区| 亚洲国产精品一区二区www在线| 亚洲第一成人在线| 欧美激情成人在线| 一区二区三区**美女毛片| 亚洲欧美三级伦理| 国模 一区 二区 三区| 免费中文日韩| 中国日韩欧美久久久久久久久| 久久精品国产99国产精品澳门| 在线观看国产成人av片| 欧美人妖在线观看| 性欧美激情精品| 亚洲第一精品夜夜躁人人爽 | 国产精品久久久久久五月尺| 亚洲欧美日韩国产中文| 欧美成人一区二区在线| 宅男噜噜噜66国产日韩在线观看| 国产精品实拍| 欧美大成色www永久网站婷| 亚洲色在线视频| 亚洲电影在线| 久久精品视频导航| 一区二区三区成人| 一区视频在线| 久久久夜夜夜| 欧美一二三区在线观看| 亚洲一区国产精品| 91久久精品美女高潮| 国产欧美精品久久| 亚洲乱码日产精品bd| 久久久久久久久久久一区 | 久久av在线| 99精品国产一区二区青青牛奶| 国产一区二区三区四区老人| 欧美日韩在线免费视频| 免费精品99久久国产综合精品| 亚洲制服丝袜在线| 日韩视频免费观看高清完整版|