今天研究了一天的inno setup,下面說說我的使用心得。inno setup的基礎性的知識可以去網上搜,一大堆。
主要說一下我覺得特別需要注意的地方:
[Setup]
;(在編譯器中點擊菜單“工具 -> 產生 GUID”可以產生一個新的 GUID)
AppId={{33B09C83-AB05-47DE-BFC0-C13A85DA5743}
AppName=myprogram
AppVerName=myprogram
AppPublisher=你的公司名
AppPublisherURL=你的公司網站
AppSupportURL=你的公司網站
AppUpdatesURL=你的公司網站
DefaultDirName={pf}\myprogram <---------在安裝嚮導中提示使用者指定安裝目錄時的預設目錄
;DefaultGroupName=myprogram <------在開始菜單的名字
OutputBaseFilename=myprogram <---------表示你的安裝檔案名稱為myprogram.exe(如果改成是setup,那麼產生的檔案名稱就是setup.exe
Compression=none
SolidCompression=no
AlwaysRestart=no
;不指定安裝路徑和不添加開始功能表項目
;DisableDirPage=yes
DisableProgramGroupPage=yes
VersionInfoVersion = 0.1.1
[Languages]
Name: "chinese"; MessagesFile: "compiler:Default.isl" <------指定安裝時用的語言為簡體中文
;[Tasks]
;因為它沒有使用者互動介面程式,直接是在命令視窗下啟動並執行,所以這個驅動不能建立捷徑,
;Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files] <--source:代表你電腦中的驅動檔案,經過編譯之後都會整合在setup中。別人使用這個setup程式時就直接把這些檔案放到他的電腦app目錄下,app是他選擇的目錄
Source: "driver.inf";DestDir: "{app}";Flags: ignoreversion; Check: Isx86
Source: "driver.sys";DestDir: "{app}";Flags: ignoreversion; Check: Isx86
Source: "udriver.exe";DestDir: "{app}";Flags: ignoreversion;Check: Isx86
Source: "driver.ids";DestDir: "{app}";Flags: ignoreversion;Check: Isx86
Source: "devcon.exe";DestDir: "{app}";Flags: ignoreversion;Check: Isx86
Source: "CheckDriverExist.bat";DestDir: "{app}";Flags: ignoreversion;Check: Isx86 <---這個.bat是自己寫的批次檔,負責檢測當前驅動是否已經安裝,防止多次安裝
[Run] <------下面這個是執行添加硬體的那個安裝
Filename: "{app}\devcon.exe"; Parameters: "install US.inf ""root\usbipenum"""; WorkingDir: "{app}";Flags: runhidden; Check:IsSMIUSBoverIPExist
[code]
var
ErrorCode: Integer;
ResultString: String;
function Isx86:Boolean;
begin
Result:=not IsWIn64;
end;
function IsSMIUSBoverIPExist:Boolean;
begin
ShellExec('', ExpandConstant('{app}\CheckUSBoverIPExist.bat'),
'', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
ResultString:=GetIniString('SMIUSBoverIP','result',ResultString,ExpandConstant('{app}\result.ini'));
Result := true;
if (ResultString <> '0') then begin
Result := false;
end
end;
前面一直不懂,我們要做什麼事情,inno serup的執行步驟是什嗎?想了很久,才知道它的一步一步的介面都已經為我們做好了,我們要做的就是FIles部分和Run部分。
files部分主要是添加檔案到使用者系統中去,你可以再這個過程的check進行條件安裝,主要是check的函數需要自己寫的。
有了前面一部分之後,就進行編譯,通過了產生了exe檔案,然後進行安裝,可是怎麼安裝都安裝不成功。一直想不通安裝的動作動作子啊那裡?後面看了別人的代碼才知道在RUN部分。Run部分是核心,前面一直在做的是檔案轉移,使用devcon才是真正的添加硬體。
本人比較孤陋寡聞,也許這些東西很簡單,一般人都不會有這樣的疑惑。我是希望能夠讓那麼有這樣疑惑的人能夠不要再像我這樣花好長時間去弄這些簡單的問題。