自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

了解一下C/S軟件打包部署神器InnoSetup

系統(tǒng) Windows
我們都知道做客戶端軟件,一般交付給客戶的都是exe的安裝包。那么我們平常開(kāi)發(fā)完成之后,如何把程序進(jìn)行打包呢。找了下發(fā)現(xiàn)Inno Setup是個(gè)不錯(cuò)的選擇。

[[385773]]

本文轉(zhuǎn)載自微信公眾號(hào)「UP技術(shù)控」,作者conan5566。轉(zhuǎn)載本文請(qǐng)聯(lián)系UP技術(shù)控公眾號(hào)。  

概述

我們都知道做客戶端軟件,一般交付給客戶的都是exe的安裝包。那么我們平常開(kāi)發(fā)完成之后,如何把程序進(jìn)行打包呢。找了下發(fā)現(xiàn)Inno Setup是個(gè)不錯(cuò)的選擇。

InnoSetup 是一個(gè)免費(fèi)的 Windows 安裝程序制作軟件。第一次發(fā)表是在 1997 年,Inno Setup 今天在功能設(shè)置和穩(wěn)定性上的競(jìng)爭(zhēng)力可能已經(jīng)超過(guò)一些商業(yè)的安裝程序制作軟件。

能做什么

1.支持現(xiàn)在所有正在使用的 Windows 版本: 7, 2008 R2, Vista, XP, 2008,2003, 2000, Me, 98, 95, 和 NT 4.0 (不需要服務(wù)包)。

2.廣泛支持在 64 位 的 Windows XP and Windows Server2003 版本的操作系統(tǒng)中的 64 位應(yīng)用程序安裝。支持 x64 和 Itanium 兩個(gè)結(jié)構(gòu)。(在 Itanium 結(jié)構(gòu)中,必須在 64 位模式安裝 Service Pack 1。)

3.支持創(chuàng)建單個(gè)EXE 格式的安裝程序,使你的程序可以很方便地在網(wǎng)絡(luò)上發(fā)表。同時(shí)也支持磁盤(pán)延伸。

4.標(biāo)準(zhǔn)的Windows 2000/XP 樣式向?qū)Ы缑妗?/p>

5.定制安裝類型,例如:完整安裝,最小安裝,自定義安裝。

6.完整的卸載功能。

7.文件安裝:

包括完全的“壓縮”支持,bzip2 和 7-Zip LZMA 文件壓縮。安裝程序可以比較文件版本信息,替換正在使用的文件,使用共享文件計(jì)數(shù),注冊(cè)DLL/OCX 和類型庫(kù),以及安裝字體。

8.可以在任意地方創(chuàng)建快捷方式,包括開(kāi)始菜單和桌面。

9.創(chuàng)建注冊(cè)表 和.INI 條目。

10.在安裝之前、之中或之后可運(yùn)行其他程序。

11.支持多語(yǔ)言安裝。

12.支持密碼和加密安裝。

13.支持?jǐn)?shù)字簽名 、安裝和卸載。

14.后臺(tái)安裝和后臺(tái)卸載。

15.Unicode安裝。(Windows 2000/XP 或更高)

16.完整的Pascal 腳本 引擎選項(xiàng)于運(yùn)行期高級(jí)自定義安裝和卸載。

17.全部源代碼公開(kāi)(Borland Delphi 2.0-5.0 和 2009)。

創(chuàng)建安裝程序的方式:腳本

安裝程序用編譯腳本的方式創(chuàng)建,腳本其實(shí)就是一個(gè)類似.INI 文件格式的 ASCII 碼文本文件。(它不象你想象的那么復(fù)雜!)。Unicode Inno Setup支持 UTF-8 編碼文本文件。

腳本用一個(gè)“.iss”(表示 Inno Setup Script腳本) 的擴(kuò)展名。腳本控制著安裝程序的所有方面。由它指定哪些文件將被安裝到什么地方,在哪里創(chuàng)建快捷方式,且被命名為什么。

腳本文件一般可以用安裝程序編譯器程序內(nèi)置的編輯器進(jìn)行編輯。在你編寫(xiě)完腳本后,下一個(gè)最終步驟就是選擇安裝程序編譯器中的“編譯”。創(chuàng)建完成后,就可以運(yùn)行根據(jù)你腳本編譯的安裝程序了。按默認(rèn),這個(gè)安裝程序創(chuàng)建在包含腳本文件目錄下的名為“輸出”目錄中。

如果你想看看它是怎樣工作的,啟動(dòng)安裝程序編譯器,單擊“文件 | 打開(kāi)”,并選擇位于 Inno Setup 安裝目錄下的Examples 子目錄中的一個(gè)腳本文件。(你也可以將這些示例腳本作為你自己編寫(xiě)腳本的模板。)

以下是我之前的項(xiàng)目的腳本

  1. ; Script generated by the Inno Setup Script Wizard. 
  2. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! 
  3.  
  4. #define MyAppName "主機(jī)助手" 
  5. #define MyAppVersion "1.1.1.7" 
  6. #define MyAppPublisher "點(diǎn)擊網(wǎng)絡(luò), 技術(shù)部." 
  7. #define MyAppURL "http://yroot.bidns.net/" 
  8. #define MyAppExeName "主機(jī)助手.exe" 
  9.  
  10. [Setup] 
  11. ; NOTE: The value of AppId uniquely identifies this application. 
  12. ; Do not use the same AppId value in installers for other applications. 
  13. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) 
  14. AppId={{CD9818E0-FEE2-418E-9775-15F50AE2229E} 
  15. AppName={#MyAppName} 
  16. AppVersion={#MyAppVersion} 
  17. ;AppVerName={#MyAppName} {#MyAppVersion} 
  18. AppPublisher={#MyAppPublisher} 
  19. AppPublisherURL={#MyAppURL} 
  20. AppSupportURL={#MyAppURL} 
  21. AppUpdatesURL={#MyAppURL} 
  22. DefaultDirName={pf}\ZhugAssistant 
  23. DisableProgramGroupPage=yes 
  24. OutputDir=C:\Users\admin\Desktop 
  25. OutputBaseFilename=主機(jī)助手安裝包 
  26. SetupIconFile=C:\Users\admin\Documents\Visual Studio 2010\Projects\yroot-10-24\yroot\bin\Debug\images\title.ico 
  27. Compression=lzma 
  28. SolidCompression=yes 
  29.  
  30. [Languages] 
  31. Name"english"; MessagesFile: "compiler:Default.isl" 
  32.  
  33. [Tasks] 
  34. Name"desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: exclusive 
  35. Name"quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked   
  36.  
  37. [Files] 
  38. Source: "D:\Debug\主機(jī)助手.exe"; DestDir: "{app}"; Flags: ignoreversion 
  39. Source: "D:\Debug\AccessSetup.exe"; DestDir: "{app}"; Flags: ignoreversion 
  40. Source: "D:\Debug\conf\*"; DestDir: "{app}\conf\"; Flags: ignoreversion recursesubdirs createallsubdirs 
  41. Source: "D:\Debug\data\*"; DestDir: "{app}\data\"; Flags: ignoreversion recursesubdirs createallsubdirs 
  42. Source: "D:\Debug\images\*"; DestDir: "{app}\images\"; Flags: ignoreversion recursesubdirs createallsubdirs 
  43. Source: "D:\Debug\tools\*"; DestDir: "{app}\tools\"; Flags: ignoreversion recursesubdirs createallsubdirs 
  44. Source: "D:\Debug\CSkin.dll"; DestDir: "{app}"; Flags: ignoreversion 
  45. Source: "D:\Debug\DiskQuotaTypeLibrary.dll"; DestDir: "{app}"; Flags: ignoreversion 
  46. Source: "D:\Debug\DMSkin.dll"; DestDir: "{app}"; Flags: ignoreversion 
  47. Source: "D:\Debug\form_data_path.txt"; DestDir: "{app}"; Flags: ignoreversion 
  48. Source: "D:\Debug\Interop.ADODB.dll"; DestDir: "{app}"; Flags: ignoreversion 
  49. Source: "D:\Debug\Interop.ADOX.dll"; DestDir: "{app}"; Flags: ignoreversion 
  50. Source: "D:\Debug\Interop.FsrmLib.dll"; DestDir: "{app}"; Flags: ignoreversion 
  51. Source: "D:\Debug\Interop.IISOle.dll"; DestDir: "{app}"; Flags: ignoreversion 
  52. Source: "D:\Debug\Interop.TaskScheduler.dll"; DestDir: "{app}"; Flags: ignoreversion 
  53. Source: "D:\Debug\MetroFramework.Design.dll"; DestDir: "{app}"; Flags: ignoreversion 
  54. Source: "D:\Debug\MetroFramework.dll"; DestDir: "{app}"; Flags: ignoreversion 
  55. Source: "D:\Debug\MetroFramework.Fonts.dll"; DestDir: "{app}"; Flags: ignoreversion 
  56. Source: "D:\Debug\Microsoft.Web.Administration.dll"; DestDir: "{app}"; Flags: ignoreversion 
  57. Source: "D:\Debug\Microsoft.Win32.TaskScheduler.dll"; DestDir: "{app}"; Flags: ignoreversion 
  58. Source: "D:\Debug\MySql.Data.dll"; DestDir: "{app}"; Flags: ignoreversion 
  59. Source: "D:\Debug\SimpleUpdater.dll"; DestDir: "{app}"; Flags: ignoreversion 
  60. Source: "D:\Debug\yroot.vshost.exe"; DestDir: "{app}"; Flags: ignoreversion 
  61. Source: "D:\Debug\yroot.vshost.exe.config"; DestDir: "{app}"; Flags: ignoreversion 
  62. Source: "D:\Debug\yroot.vshost.exe.manifest"; DestDir: "{app}"; Flags: ignoreversion 
  63. Source: "D:\Debug\yroot_beta.vshost.exe"; DestDir: "{app}"; Flags: ignoreversion 
  64. Source: "D:\Debug\yroot_beta.vshost.exe.config"; DestDir: "{app}"; Flags: ignoreversion 
  65. Source: "D:\Debug\yroot_beta.vshost.exe.manifest"; DestDir: "{app}"; Flags: ignoreversion 
  66. Source: "D:\Debug\主機(jī)助手.exe"; DestDir: "{app}"; Flags: ignoreversion 
  67. Source: "D:\Debug\主機(jī)助手.exe.config"; DestDir: "{app}"; Flags: ignoreversion 
  68. Source: "D:\Debug\主機(jī)助手.pdb"; DestDir: "{app}"; Flags: ignoreversion 
  69. ; NOTE: Don't use "Flags: ignoreversion" on any shared system files 
  70.  
  71. [Icons] 
  72. Name"{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" 
  73. Name"{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon 
  74. Name"{group}\{cm:UninstallProgram,主機(jī)助手}"; Filename: "{uninstallexe}"   
  75.  
  76. ;[Components]   
  77. ;Name: Access; Description: "Access支持" ; Types: Full   
  78.  
  79. [Messages]    
  80. ;卸載對(duì)話框說(shuō)明   
  81. ConfirmUninstall=您真的想要從電腦中卸載主機(jī)助手嗎?%n%n按 [是] 將會(huì)刪除 %1 以及它的組件;%n按 [否] 則讓軟件繼續(xù)留在您的電腦上.   
  82.  
  83. [Run] 
  84. Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent 
  85.  
  86. [Registry]   
  87. Root: HKLM ;SubKey:"Software\ZhugAssistant";ValueType:dword;ValueName:config;ValueData:10 ;Flags: uninsdeletekey 
  88.  
  89. [code] 
  90. //init setup 
  91. function InitializeSetup(): boolean;   
  92. //var 
  93. var Istoken: boolean; //avoid setup again    
  94. begin        
  95. Istoken := true;         
  96. if RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\ZhugAssistant''config'then   
  97. begin   
  98.     MsgBox('程序已安裝,請(qǐng)卸載后再嘗試安裝!',mbConfirmation, MB_OK);   
  99.     Istoken := false;   
  100. end else   
  101. begin   
  102.      Istoken := true;   
  103. end;   
  104. Result := Istoken;   
  105. end
  106.  
  107. //next button 
  108. function NextButtonClick(CurPageID: Integer): Boolean;   
  109. //var 
  110. var ResultCode: Integer;   
  111. var IsSetup : Boolean;   
  112. begin   
  113. IsSetup := true ;   
  114. case CurPageID of   
  115.     wpReady:   
  116.       begin   
  117.        if not RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\CLSID\{6F3DD387-5AF2-492B-BDE2-30FF2F451241}\InprocServer32\12.0.0.0''RuntimeVersion'then   begin   
  118.           if MsgBox('程序執(zhí)行需要Access數(shù)據(jù)庫(kù)的支持,是否現(xiàn)在安裝?', mbConfirmation, MB_YESNO) = idYes then begin   
  119.            ExtractTemporaryFile('AccessSetup.exe');    ExtractTemporaryFile('DMSkin.dll'); 
  120.             if not Exec(ExpandConstant('{tmp}\AccessSetup.exe'), '''', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then   
  121.               MsgBox('Access安裝出錯(cuò):' #13#13 ' ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK);   
  122.           end else begin   
  123.                 IsSetup := false ;   
  124.           end ;   
  125.           BringToFrontAndRestore();   
  126.         end;   
  127.       end;   
  128. end;   
  129. Result := IsSetup;   
  130. end
  131.    

 

責(zé)任編輯:武曉燕 來(lái)源: UP技術(shù)控
相關(guān)推薦

2022-03-10 07:39:33

.NET部署模式

2022-03-24 13:36:18

Java悲觀鎖樂(lè)觀鎖

2020-12-10 08:44:35

WebSocket輪詢Comet

2018-06-05 17:40:36

人工智能語(yǔ)音識(shí)別

2024-04-11 12:19:01

Rust數(shù)據(jù)類型

2019-02-20 14:16:43

2020-02-10 14:26:10

GitHub代碼倉(cāng)庫(kù)

2022-03-07 06:34:22

CQRS數(shù)據(jù)庫(kù)數(shù)據(jù)模型

2018-07-17 14:42:50

2023-11-18 09:09:08

GNUBSD協(xié)議

2024-02-28 18:22:13

AI處理器

2023-02-08 09:02:05

VS Code摸魚(yú)神器

2020-03-01 17:53:38

Excel大數(shù)據(jù)微軟

2021-08-09 09:39:59

Docker部署鏡像

2021-10-28 14:30:19

K8S Kubernetes數(shù)據(jù)持久化

2019-03-11 14:33:21

Redis內(nèi)存模型數(shù)據(jù)庫(kù)

2024-04-26 08:41:04

ViteHMR項(xiàng)目

2018-08-08 09:30:29

服務(wù)器知識(shí)Linux系統(tǒng)

2020-12-21 05:56:54

Clipboard A復(fù)制圖像開(kāi)發(fā)技術(shù)

2023-05-09 08:25:26

Gaussdb數(shù)據(jù)庫(kù)開(kāi)源數(shù)據(jù)庫(kù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)