Ⅰ inno setup將 exe文件和.NETFramework如何一起打包
新建安裝部署項目
打開VS,點擊新建項目,選擇:其他項目類型->安裝與部署->安裝向導(安裝項目也一樣),然後點擊確定。
2 安裝向導
關閉後打開安裝向導,點擊下一步,或者直接點擊完成。
3 開始製作
安裝向導完成後即可進入項目文件夾:
雙擊"應用程序文件夾"在右邊的空白處右擊,選擇添加->文件,將你的做的應用程序的可執行文件和相應的類庫和組件添加進來。然後右擊你的文件,創建快捷方式,然後把快捷方式分別復制或剪切到左邊的"用戶的'程序'菜單"和"用戶桌面"中。這樣安裝程序安裝完成後會在 "開始->所有程序"和"桌面"上生成程序的快捷方式。也可以直接在"用戶的'程序'菜單"和"用戶桌面"相應目錄下新建快捷方式,然後定位到你的文件。
然後右擊左邊的"應用程序文件夾"打開屬性對話框:將屬性中的"DefaultLocation"的路徑中的"[Manufacturer]"去掉,不然的話做好的安裝程序默認安裝目錄會是"C:\Program Files\你的用戶名\安裝解決方案名稱";
然後打開解決方案管理器,右擊你的解決方案名稱,選擇屬性:打開的屬性頁中,選擇"系統必備", 在打開的系統必備頁中,在"指定系統必備安裝組件的位置"中選中如下選擇項:從與我的應用程序相同的位置下載系統必備組件。選上以後,在生成的安裝文件包中包含.NetFramework組件 。好了,這樣就完成99%了,然後點擊"生成->生成解決方案",哈,生成成功!
4 製作完成
現在打開解決方案文件夾下的Debug文件夾,就可以看到生成的安裝文件了。
5 關於"卸載"功能的添加
上面只介紹了簡單的生成安裝的方法,但是在VS2005下並沒有直接生成卸載程序的功能,所以我們只好用msi來實現了,操作方法如下:
在添加你的應用程序項目的時候,多添加一個msiexec.exe進去,這個文件在c:\windows\system32文件夾下,添加進去以後,為了讓他更像個卸載程序,把他的名字改成"Uninstall.exe",當然這個關系不大,改不改都行。
然後創建一個快捷方式,放到"開始-程序"中,接下來我們要做的就是查找這個部署項目的ProctCode了,滑鼠左鍵單擊項目名稱,記住是左鍵單擊,然後點擊屬性標簽,注意:不是右擊的屬性,這個區別很大,這時你就可以看到ProctCode了。
然後打開你創建的那個快捷方式的屬性對話框,在Aguements屬性中輸入"/x ",好了,然後點擊"生成解決方案"即可生成帶有卸載功能的安裝程序了。
另外InnoSetup製作非常簡單,等於傻瓜式操作,要是不想用C#自帶的生成解決方案的話就自己去下一個。
Ⅱ inno setup 腳本問題,紅框里編譯不過,我想實現在安裝後從安裝文件外拷文件到安裝目錄中功能,FileCopy
FileCopy
語法:
function FileCopy(const ExistingFile, NewFile: String; const FailIfExists: Boolean): Boolean;
描述:
復制 ExistingFile 到 NewFile,保留時間戳和文件屬性。
如果 FailIfExists 為 True,當NewFile 已經存在時,專它將失敗,否則將覆屬蓋它。
如果成功返回 True,否則返回 False。
Ⅲ inno setup 怎麼整合兩個兩個exe文件到一個里並且先後運行
Inno Setup 使用說明
特殊用途的標識
有幾個 [Messages] 段的項實際上不是用於在屏幕上顯示的,它們是用於在安裝程序中指定所使用的字體和字型號的。這些可選項中的每一個都有一個前導下劃線字元
(「_」) 開始,請參閱 Default.isl 文件頭部的注釋的使用方法示例。
[Registry] 段
這個段是可選的,他定義了一些注冊表項,用於在復制完文件之後創建在用戶的系統中。
下面是 [Registry] 段的一個示例。
[Registry]
Root: HKCU; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
Root: HKCU; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\My Company\My Program"; ValueType: string;
ValueName: "InstallPath"; ValueData: "{app}"
下面列出了支持的參數:
Root (必需的)
說明:
根鍵,必須是下列各項之一:
HKCR (HKEY_CLASSES_ROOT)
HKCU (HKEY_CURRENT_USER)
HKLM (HKEY_LOCAL_MACHINE)
HKU (HKEY_USERS)
HKCC (HKEY_CURRENT_CONFIG)
示例:
Root: HKCU
Subkey (必需的)
說明:
子鍵名稱,可以包括常量。
示例:
Subkey: "Software\My Company\My Program"
ValueType
說明:
鍵值的數據類型,必須是下列各項之一:
none
string
expandsz
multisz
dword
binary
如果指定了 none (默認設置),安裝程序將創建一個沒有鍵值的鍵,在這種情況下將忽略 ValueName 和 ValueData 參數。
如果指定了 string,安裝程序將創建一個字元串 (REG_SZ) 值。
如果指定了 expandsz,安裝程序將創建一個擴展字元串 (REG_EXPAND_SZ) 值。這種數據類型主要用在 Windows NT 上,但是也支持
Windows 95/98.
如果指定了 multisz,安裝程序將創建一個多行文本 (REG_MULTI_SZ) 值。
如果指定了 dword,安裝程序將創建一個整數 (REG_DWORD) 值。
如果指定了 binary,安裝程序將創建一個二進制 (REG_BINARY) 值。
示例:
ValueType: string
ValueName
說明:
要創建的鍵值的名稱,可以包含常量。如果它是空的,將會寫入「默認」(Default)值中。如果ValueType 參數被設置為 none, 該參數將被忽略。
示例:
ValueName: "Version"
ValueData
說明:
鍵值的數據。如果 ValueType 參數是 string, expandsz 或 multisz, 該參數是一個可以包含常量的字元串。如果數據類型是
dword, 該參數可以是一個十進制整數(例如「123」)或者是一個十六進制整數(例如「$7B」)。如果數據類型是 binary,
這是一個十六進制位元組序列的形式:「00 ff 12 34」。如果數據類型是 none, 該參數被忽略。
對於一個 string, expandsz 或者 multisz 類型的鍵值,在這個參數中你可以使用一個特殊的叫做 {olddata}
的常量。{olddata} 常量代表的是注冊表鍵值原來的數據。如果你想要添加一個字元串到一個已經存在的鍵值時 {olddata}
常量時很有用的,例如,{olddata};{app}.如果該鍵值並不存在或者不是一個字元串類型,這時 {olddata}
常量會被默默地刪除。如果正要被創建的鍵值是 multisz 類型,但是已經存在的鍵值並不是多行文本 (例如它是 REG_SZ 或 REG_EXPAND_SZ
)類型,這時 {olddata} 常量也會被默默地刪除,反之亦然。
對於一個 multisz 類型的鍵值,在這個參數中你可以使用一個特殊的叫做 {break} 的常量來嵌入換行(nulls)。
示例:
ValueData: "1.0"
Flags
說明:
「標記」,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項:
createvalueifdoesntexist
當指定了此標記時,只有當相同名稱的鍵值不存在時安裝程序才會創建該鍵值。如果數據類型是 none ,或者同時指定了 deletevalue 標記將忽略該標記。
deletekey
當指定了此標記時,如果該項已存在,安裝程序會首先嘗試去刪除它,包括其中的鍵值和子鍵,然後如果 ValueType 不是 none 的話它將創建一個新的鍵和鍵值。
deletevalue
當指定了此標記時,如果該鍵值已存在,安裝程序會首先嘗試刪除該鍵值。然後如果 ValueType 不是 none ,並且該鍵不存在時它將創建該鍵和新的鍵值。
dontcreatekey
當指定了此標記時,如果該鍵不存在於用戶的系統中安裝程序將不會試圖創建該鍵或任何鍵值。如果改建不存在將不顯示錯誤消息。
典型地該標記同 uninsdeletekey 標記結合使用,以便在安裝時沒有創建該鍵時確保在卸載期間刪除該鍵。
noerror
如果安裝程序在創建鍵或鍵值時無論什麼原因失敗不顯示錯誤消息。
preservestringtype
該標記只用於 ValueType 參數為 string 或 expandsz 時。當指定了此標記並且該鍵值不存在或者已存在的鍵值不是字元串類型 (REG_SZ
或 REG_EXPAND_SZ) 時,該項將由 ValueType
指定的類型創建,如果該鍵值存在並且是一個字元串類型,該項將由與預先存在的鍵值相同的鍵值類型替代。
uninsclearvalue
當程序被卸載時,將設置該鍵值的數據為空的字元串 (類型 REG_SZ). 該標記不能同 uninsdeletekey 標記一起使用。
uninsdeletekey
當程序被卸載時,刪除整個鍵,包括其下全部的鍵值和子鍵。對於由 Windows
自身使用的鍵來說使用該標記明顯不是一個好的主意,你應當將該標記應用到你自己的應用程序鍵中。
uninsdeletekeyifempty
當程序被卸載時,如果該鍵下沒有其它鍵值和子鍵則將其刪除。該標記可以結合 uninsdeletevalue 標記一起使用。
uninsdeletevalue
當程序卸載時刪除該鍵值,該標記可以結合 uninsdeletekeyifempty 標記一起使用。
注意:對於 Inno Setup 1.1 之前的版本,你可以與 none 數據類型一起使用該標記則將會成為 「delete key if empty」
(如為空則刪除該鍵)功能的標記。這個技巧現在已經不在被支持,你必須使用 uninsdeletekeyifempty 標記來實現該功能。
示例:
Flags: uninsdeletevalue
公共參數
[Run] & [UninstallRun] 段
[Run] 段是可選的,指定任意數量的程序在成功安裝程序以後及顯示結束對話框之前被執行。同樣 [UninstallRun]
段也是可選的,指定任意數量的程序在「卸載程序」的第一步時被執行。除非下面有其它說明,兩個段共有相同的語法。
每個程序按照你的腳本編排的順序被執行,當出路 [Run]/[UninstallRun] 的項時,安裝程序將會等到當前的程序終止之後才處理下一個,當然除非使用了
nowait 標記。
這是一個 [Run] 段的示例。
[Run]
Filename: "{app}\INIT.EXE"; Parameters: "/x"
下面列出了支持的參數:
Filename (必需的)
說明:
要被執行的程序,或要被打開的文件/文件夾。如果 Filename 不是一個 .exe 或 .com 文件,你必須在該項中使用 shellexec
標記。該參數可以包含常量。
示例:
Filename: "{app}\INIT.EXE"
Parameters
說明:
程序可選的命令行參數,該參數可以包含常量。
示例:
Parameters: "/x"
WorkingDir
說明:
程序起始位置的目錄。如果沒有指定該參數或該參數是空的,將不會改變任何特殊的目錄。該參數可以包含常量。
示例:
WorkingDir: "{app}"
RunOnceId
說明:
只在 [UninstallRun] 段裡面有效。如果相同的應用程序被安裝超過了一次,「run」項將會重復出現在卸載記錄文件裡面。通過將一個字元串賦值給
RunOnceId, 你可以確保一個獨特的 [UninstallRun] 項在卸載期間只被執行一次。例如,如果在卸載記錄中的「run」中有兩個或者更多的帶有
RunOnceId 參數並被設置為「DelService」的項,則只有最後一個帶有一個 RunOnceId
參數並被設置為「DelService」的項會被執行。其餘的將被忽略。注意 RunOnceId 參數是大小寫敏感的。
示例:
RunOnceId: "DelService"
Flags
說明:
「標記」,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項:
nowait
如果指定了該標記,將不會等待該項處理被結束運行之前就進行到下一個 [Run] 項,或者結束安裝程序。不能結合 waituntilidle
標記一起使用。
shellexec
如果 Filename 不是一個可以直接執行的文件(一個 .exe 或 .com 文件)則該標記是必需的。當設置了該標記時,Filename
可以是一個文件夾或者任何已注冊的文件類型 ―― 包括 .hlp, .doc
等等。文件將會被用戶系統中的與該文件類型相關聯的應用程序打開,就像用戶在資源管理器中用滑鼠雙擊該文件一樣。
當在 Filename
中使用一個文件夾名稱時,建議在後面加上一個反斜杠字元(例如「{group}\」),以確保可能有相同名稱的程序不會被執行。同樣要注意文件夾只能在 Windows
95/NT 4+ 上被打開,因為從那時起使用了一個新的資源管理器的外殼。
使用 shellexec 標記有一個缺點,那就是無法等待該過程結束,因此,它始終就像被指定了 nowait 標記一樣操作。
skipifdoesntexist
如果指定了該標記,如果 Filename 不存在安裝程序將不會顯示錯誤消息。它只適用於 [Run] 段,因為卸載程序從來不顯示錯誤消息在
[UninstallRun] 項執行失敗時。
runmaximized
如果指定了該標記,將會在一個最大化的窗口啟動程序或文檔。
runminimized
如果指定了該標記,將會在一個最小化的窗口啟動程序或文檔。
waituntilidle
如果指定了該標記,它將暫停直到該過程正在等待用戶的輸入並且沒有未決的輸入時,取而代之的是等待該過程的結束。(該標記調用 WaitForInputIdle
Win32 函數.) 不能結核 nowait 一起使用。
示例:
Flags: nowait
公共參數
[UninstallDelete] 段
該段是可選的。該段是用來定義一些附加的除了那些被安裝的應用程序之外的要被卸載程序刪除的文件或目錄。使用該段來刪除由你的應用程序創建的 .INI
文件是一個常用的辦法。卸載程序在卸載過程的最後一步處理這些項。
這是一個 [UninstallDelete] 段的示例:
[UninstallDelete]
Type: files; Name: "{win}\MYPROG.INI"
下面列出了支持的參數:
Type (必需的)
說明:
指出要被卸載程序刪除的是什麼。必須是下列之一:
files
Name 參數指定的是一個具體的文件的名稱,或者是一個帶有通配符的文件名。
filesandordirs
功能上類似於 files ,但是它還可以匹配目錄名稱,並且任何名稱匹配的目錄包括其中所有的文件和子目錄都會被刪除。
dirifempty
當使用它時,Name 參數必須是一個目錄的名稱,但是它不能包括通配符。只有在不包含任何文件和子目錄的情況下該目錄才能被刪除。
示例:
Type: files
Name (必需的)
說明:
要被刪除的文件或目錄的名稱。
注意:不要試圖通過在這里使用通配符去刪除 {app}
目錄下的全部文件,我強烈建議你不要這樣做的原因由兩個,首先,用戶通常不會意識到可能還有他們放進應用程序目錄中的數據文件將要被刪除而不會得到警告(例如他們可能卸載應用程序只是為了要將它轉移到一個不同的驅動器)。最好是將其保留一直到最後用戶想要刪除時用手工的方法刪除;還有,如果由於用戶的失誤碰巧將程序安裝到了一個錯誤的目錄當中(例如
C:\WINDOWS)而這時去卸載它勢必結果會損失慘重。再次聲明,千萬不要這么做!
示例:
Name: "{win}\MYPROG.INI"
公共參數
編譯器相關
[Setup]: Bits
有效值: 32
說明:
1.3 版本以後已廢棄。 1.3 以前的版本的 Inno Setup 有一個 16 位的版本,編譯器將檢查 Bits
關鍵字以判斷是否使用了正確的編譯器來編譯腳本。以後 Inno Setup 的更新的版本只有 32 位的版本可用,你將不再需要設置該關鍵字。無論什麼時候如果
Bits 被設置為「16」,編譯器都將會失敗並提示一個錯誤消息。
[Setup]: UseSetupLdr
有效值: yes 或 no
默認值: yes
說明:
告訴安裝程序編譯器要創建的安裝程序的類型,如果是 yes, 將把所有的安裝程序數據編譯成一個單獨的 SETUP.EXE
(如果你願意也可以重新命名為任何名稱)。如果是 no, 將把安裝程序數據編譯成至少三個文件:SETUP.EXE, SETUP.0 和 SETUP.1. 你想使用
no 的僅有的理由大概是為了調試的目的。
注意:不要在一個使用了多磁碟生成(DiskSpanning=yes)的安裝程序中使用 UseSetupLdr=no,當 UseSetupLdr 是 yes
時,安裝程序被復制到用戶的臨時 (TEMP) 目錄並在那裡運行,這不會發生在 UseSetupLdr 是 no 的情況下,如果 Windows
試圖去在磁碟上尋找 setup.exe 文件卻不能找到,因為在驅動器中的是一個不同的磁碟,所以會產生錯誤的結果。
[Setup]: BackColor, BackColor2
有效值: 一個值形如 $bbggrr, 這里的 rr, gg 和 bb
指定了兩位的亮度值(以十六進製表示)分別為紅色,綠色和藍色。或者也可以是下列預定義的顏色名稱之一:clBlack(黑色),clMaroon(暗紅),clGreen(綠色),clOlive(橄欖綠),clNavy(深藍),clPurple(紫色),clTeal(深青),clGray(灰色),clSilver(淺灰),clRed(紅色),clLime(淺綠),clYellow(黃色),clBlue(藍色),clFuchsia(紫紅),clAqua(青綠),clWhite(白色)。
默認值: BackColor 為 clBlue,
BackColor2 為 clBlack
說明:
BackColor 關鍵字自定的顏色被用在安裝程序窗口背景漸變色的上面(或左面,如果
BackColorDirection=lefttoright),BackColor2 指定的顏色被用在下面(或右面)。
如果 BackSolid=yes 則 BackColor2 的設置被忽略。
示例:
BackColor=clBlue
BackColor2=clBlack
BackColor=$FF0000
BackColor2=$000000
[Setup]: BackColorDirection
有效值: toptobottom 或 lefttoright
默認值: toptobottom
說明:
決定了安裝程序窗口的背景漸變色的漸變方向,如果 BackColorDirection 是 toptobottom, 將自上而下繪出,如果是
lefttoright, 將從左到右繪出。
[Setup]: BackSolid
有效值: yes 或 no
默認值: no
說明:
它決定了安裝程序窗口的背景色是使用單一顏色還是漸變色,如果是 yes, 背景色會是一單一顏色(顏色由 BackColor 指定,忽略 BackColor2)。
[Setup]: AppName
說明:
這個必需的關鍵字指定了你正在安裝的應用程序的標題。不要包含版本號,那樣應該使用 AppVerName 關鍵字。AppName
在安裝程序的全部過程始終被顯示,位於安裝程序屏幕的左上角和向導中。
示例: AppName=My Program
[Setup]: AppVerName
說明:
這個必需的關鍵字的值應該和 AppName 的值相同(或相似),但是它還應當包含程序的版本號。
示例: AppVerName=My Program version 3.0
[Setup]: AppId
默認值: 如果沒有指定 AppId 或者它是空值,編譯器將會把 AppName 的值作為 AppId 來使用。
說明:
AppId 的值是被存儲在卸載記錄文件 (unins???.dat)
裡面的,以便隨後的安裝程序檢查後決定是否可以被添加到一個特定的已存在的卸載記錄,安裝程序只有在已存在的卸載記錄中的 AppId 和當前的安裝程序的 AppId
相同是才能添加到卸載記錄。舉一個實際的例子,比方說你右兩個安裝程序,一個叫做《我的程序》而另外一個叫做《我的程序 1.1 升級版》,要想把《我的程序 1.1
升級版》添加到《我的程序》的卸載記錄中,你應該設置兩個安裝程序的 AppId 為相同的值。
AppId 還決定了卸載注冊表鍵的實際名稱,被 Inno Setup 在其末尾附加上「_is1」(因此,如果 AppId 是
「MyProgram」,那麼這個鍵將會被命名為「MyProgram_is1」)。Inno Setup 的早於 1.3 的版本的鍵的名稱是基於
AppVerName 的值的。
無論什麼時候 AppId 都不會被顯示出來,因此你要求非常隱諱的感覺很輕松。
示例: AppId=MyProgram
[Setup]: AppMutex
說明:
如果用戶要為當前的應用程序升級為新的版本,然而當前的應用程序正在運行,該關鍵字就是用來防止這類事情的發生的,而且它也可以防止用戶卸載正在運行的應用程序。它指定了一個或多個同名互斥體的名稱(多個互斥體用逗號隔開),安裝程序和卸載程序將會在啟動時檢查,如果存在,安裝程序/卸載程序將顯示如下的信息:「[安裝程序或卸載程序]
檢測到 [應用程序] 現在正在運行。請立即關閉它的全部實例,然後單機『確定』繼續,或者『取消』退出。」
如果你要使用這個關鍵字就必須在你的應用程序中以該關鍵字指定的名稱添加一個同名的互斥體。例如在 Delphi 和 C
中創建如下顯示的同名互斥體,該代碼應該在應用程序啟動是被執行。
Delphi:
CreateMutex(nil, False, 'MyProgramsMutexName');
C:
CreateMutex(NULL, FALSE, "MyProgramsMutexName");
並不是必需在應用程序被結束之前顯示的銷毀同名互斥體對象,系統會自動完成此功能,也不推薦你這樣做,因為理想狀態下同名互斥體對象必須存在直到進程被完全終止。
注意在 Windows 下同名互斥體是大小寫敏感的。
要想獲得有關同名互斥體的更多信息請參閱 MS SDK 幫助的 CreateMutex 主題。
示例: AppMutex=MyProgramsMutexName
[Setup]: AppCopyright
說明:
可選的,它只是用來在安裝程序屏幕的右下角顯示一個版權消息。
示例: AppCopyright=Copyright ? 1997 My Company, Inc.
[Setup]: AppPublisher, AppPublisherURL, AppSupportURL, AppUpdatesURL, AppVersion
說明:
所有這些關鍵字都是用來在 Windows 2000 的控制面板「添加/刪除程序」的「支持」對話框中顯示一些信息。這些設置是可選的,並且在早期的 Windows
版本中是沒有作用的。
示例:
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.mycompany.com/
AppVersion=1.5
[Setup]: DefaultDirName
說明:
這是個必需的關鍵字,該值是默認的目錄名稱,用於「選擇目錄頁」向導。通常它有一個目錄常量前綴。
如果 UsePreviousAppDir 是 yes (默認值)並且安裝程序發現已經安裝了一個相同應用程序的早期版本,它將用先前選擇的目錄代替默認的目錄名稱。