在進行 WPF 程式打包發佈的時候如果對程式打包沒有特別高的要求,InnoSetup 足以勝任普通的程式打包發佈需求,它支持安裝包加密,安裝包升級安裝,註冊表操作等常規功能,以下腳本示例中有對常見操作進行相關說明。 [TOC] 簡介 Inno Setup用Delphi寫成,其官方網站同時也提供源程式 ...
目錄
在進行 WPF 程式打包發佈的時候如果對程式打包沒有特別高的要求,InnoSetup 足以勝任普通的程式打包發佈需求,它支持安裝包加密,安裝包升級安裝,註冊表操作等常規功能,以下腳本示例中有對常見操作進行相關說明。
簡介
Inno Setup用Delphi寫成,其官方網站同時也提供源程式免費下載。它雖不能與Installshield這類恐龍級的安裝製作軟體相比,但也當之無愧算是後起之秀。Inno Setup是一個免費的安裝製作軟體,小巧、簡便、精美是其最大特點,支持pascal腳本,能快速製作出標準Windows2000風格的安裝界面,足以完成一般安裝任務。
示例腳本
; 腳本由 Inno Setup 腳本嚮導 生成!
; 有關創建 Inno Setup 腳本文件的詳細資料請查閱幫助文檔!
; 程式名稱
#define MyAppName "hippieZhou"
; 程式版本號
#define MyAppVersion "2.2.0.5"
; 發佈商名稱
#define MyAppPublisher "hippieZhou, Inc."
; 發佈商網址
#define MyAppURL "http://www.cnblogs.com/hippieZhou"
; 執行主程式名稱
#define MyAppExeName "hippieZhou.exe"
[Setup]
; 註: AppId的值為單獨標識該應用程式。
; 不要為其他安裝程式使用相同的AppId值。
; (生成新的GUID,點擊 工具|在IDE中生成GUID。)
AppId={{5597878A-538D-4164-B06A-2DC56C9ED8EE}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\TerraVision
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
; 程式打包輸出目錄
OutputDir=Build\
OutputBaseFilename=setup
SetupIconFile=Application.ico
Compression=lzma
SolidCompression=yes
VersionInfoVersion={#MyAppVersion}
ArchitecturesAllowed=x64
; 以64位架構模式進行安裝
ArchitecturesInstallIn64BitMode=x64
; 以管理員模式運行
PrivilegesRequired=poweruser
; 安裝程式安裝密碼
Password=123456
; 是否加密
Encryption=yes
[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
; 指定主程式
Source: "Src\TerraVision.Shell.exe"; DestDir: "{app}"; Flags: ignoreversion
; 拷貝程式文件到指定目錄
Source: "Src\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; 註意: 不要在任何共用系統文件上使用“Flags: ignoreversion”
; 檢測當前程式是否在運行
[Code]
function IsAppRunning(const FileName : string): Boolean;
var
FSWbemLocator: Variant;
FWMIService : Variant;
FWbemObjectSet: Variant;
begin
Result := false;
FSWbemLocator := CreateOleObject('WBEMScripting.SWBEMLocator');
FWMIService := FSWbemLocator.ConnectServer('', 'root\CIMV2', '', '');
FWbemObjectSet := FWMIService.ExecQuery(Format('SELECT Name FROM Win32_Process Where Name="%s"',[FileName]));
Result := (FWbemObjectSet.Count > 0);
FWbemObjectSet := Unassigned;
FWMIService := Unassigned;
FSWbemLocator := Unassigned;
end;
function InitializeSetup(): Boolean;
begin
if IsAppRunning('hippiezhou.exe') then
begin
if MsgBox('程式正在運行,請先關閉後再進行安裝!',mbInformation,MB_OK) = idYes then
begin
Result := False;
end
end
else
begin
Result := True;
end
end;
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon