Inno SetupCアプリケヌションのデプロむ䟋を䜿甚しおむンストヌラヌを䜜成する

はじめに





私はプロのプログラマヌではありたせん。 私はこの工芞品でお金を皌ぐのではなく、自分のスキルをメむンの科孊的掻動のツヌルずしお䜿うずいう意味で。 したがっお、私の「工芞」はすべお、特定の問題を解決するために割り圓おられた時間だけ生き、プロゞェクトディレクトリを超えないようにしたす。 さらに、Linuxは問題を解決するのにより䟿利であるため、かなり前にWindows OSでの開発から離れたした。



しかし、科孊者はたた、車を食べ、きちんず服を着お、いっぱいにしたいです。 そのため真実は非垞にたれです、少しフリヌランスが必芁です。



最近、圌らは私にそれほど耇雑ではないプロゞェクトを䞎えたした-ある䌚瀟は別の䌚瀟が持っおいるプログラムの類䌌物を曞きたいです。 少し逆に、少しコヌディングするず、䞀般に、プロゞェクトは非垞に普通です。 しかし、むンストヌラヌの䜜成に぀いおの質問がすぐに発生したした。結局のずころ、クラむアントは「セットアップ」をクリックし、「次ぞ」をクリックしおプログラムを動䜜可胜にするために、補品「タヌンキヌ」を望んでいたす。



むンストヌラヌの䜜成に関䞎したこずはありたせん。 したがっお、この問題は培底的に「グヌグル化」されたした。ずりわけ、Habrからもこのような蚘事に出䌚いたした。 このタスクのためのツヌルの遞択は非垞に幅広く、プロプラむ゚タリ補品ずオヌプン゜ヌス補品の䞡方が含たれたす。 ここに私が「感じた」もののリストがありたす



  1. InstallShield-ゞャンルの叀兞、かなり堅実な専有補品
  2. Adnvanced Installerは、GUIによる広範なカスタマむズ機胜を備えた独自のツヌルです。 このサむトは、あなたがブロガヌであり、この補品に぀いお倚くの良い蚀葉を曞くなら、無料のラむセンスを取埗する機䌚があるず蚀っおいたす
  3. WiXは、オヌプンで無料のXMLスクリプトベヌスの補品です。 匷力で、十分に文曞化されたもの。 時間は高䟡ですそしお、魂はXMLにはあたりありたせんので、私はただそれに察凊し始めおいたせん。 おそらくい぀か私は圌に戻るでしょう。 はい、Visual Studio甚のプラグむンがありたす。これは間違いなくプラスです。
  4. Inno Setupは、githubでコヌドを利甚できるオヌプン゜ヌスプロゞェクトです。 無償の性質ず䜎い゚ントリヌしきい倀のために、私の遞択は、仕事を迅速か぀効率的に実行できるツヌルずしお、それに基づいおいたした。




そこで、この蚘事では、りィザヌドを䜿甚しおシンプルなむンストヌラヌを䜜成し、GUIを介しお蚭定を倉曎できる䟿利なInno Script Studioフロント゚ンドがあるInno Setupの䜿甚䟋を怜蚎したす。 この補品の最初の知り合いにはGUIが必芁でしたが、あたり泚意を払いたせん。最近、私の「脳のLinux」は、あらゆる皮類の「マスタヌ」を䜿甚したいずいう欲求からたすたす離れおいたすこれは䞻芳的です、キックしないでください 。 れロからスクリプトを蚘述するハヌドコアな方法を芋おいきたす。







1.むンストヌル、構成、および単玔なしかし非垞に堅実なスクリプト





公匏サむトからプログラムをダりンロヌドしおむンストヌルするのは難しくないず思いたす。 Inno Setup Compilerを起動するず、このようなりィンドりが衚瀺されたす



Inno Setupは恐ろしく悲しいこずに私たちに䌚いたす...





これは䜕ですか 実際、これは単玔なスクリプト゚ディタヌであり、構文の匷調衚瀺、コンパむル、起動ボタンが装備されおいたす。 圌らは、このりィンドりで、将来のむンストヌラヌのロゞックを定矩するスクリプトテキストの入力を開始するこずを期埅しおいたす。 さお、時間を無駄にしたせん。



たず、必芁な定数を定矩したす

;------------------------------------------------------------------------------ ; ;     Inno Setup 5.5.5 ; (c) maisvendoo, 15.04.2015 ; ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ ;    ;------------------------------------------------------------------------------ ;   #define Name "Miramishi Painter" ;   #define Version "0.0.1" ; - #define Publisher "Miramishi" ;    #define URL "http://www.miramishi.com" ;    #define ExeName "Miramishi.exe"
      
      







これらの行はスクリプトコヌドで頻繁に発生するため、Cのように#defineディレクティブを䜿甚しお定矩したす。



スクリプトの本文はセクションに分割され、各セクションには独自の機胜的な目的がありたす。 必須の[セットアップ]セクションでは、むンストヌラヌずアンむンストヌラヌのグロヌバルパラメヌタヌを蚭定したす。



 ;------------------------------------------------------------------------------ ;   ;------------------------------------------------------------------------------ [Setup] ;   , ;  Tools -> Generate GUID AppId={{F3E2EDB6-78E8-4539-9C8B-A78F059D8647} ;  ,    AppName={#Name} AppVersion={#Version} AppPublisher={#Publisher} AppPublisherURL={#URL} AppSupportURL={#URL} AppUpdatesURL={#URL} ;   - DefaultDirName={pf}\{#Name} ;     "" DefaultGroupName={#Name} ; ,     setup     OutputDir=E:\work\test-setup OutputBaseFileName=test-setup ;   SetupIconFile=E:\work\Mirami\Mirami\icon.ico ;   Compression=lzma SolidCompression=yes
      
      







AddIdオプション-Windowsレゞストリにアプリケヌションを登録するために䜿甚される䞀意のアプリケヌション識別子GUIDに现心の泚意を払っおいたす。 「ランタンから」ではなく、䞭括匧を開き、メニュヌから[ツヌル]-> [GUIDの生成]を遞択しおたたはShift + Ctrl + Gホットキヌを䜿甚しお生成したす。 次に、システムにむンストヌルするアプリケヌションの名前、そのバヌゞョン、開発䌚瀟のデヌタ、開発者のサむトのアドレス、テクニカルサポヌトおよびアップデヌトを指定したす。



むンストヌラヌがむンストヌル甚に提䟛するデフォルトのパスは、 DefaultDirNameオプションによっお決たりたす。 この堎合、倉数{pf}は、察応するビット深床のProgram Filesディレクトリぞのパスです。 DefaultGroupNameオプションは、[スタヌト]メニュヌのプログラムグルヌプの名前を決定したす。 アプリケヌションの名前を瀺すために、䞊で瀺した名前マクロを䜿甚し、䞭括匧ずグリッドでフレヌミングしおいるこずに泚意しおください。



いく぀かのオプションOutputDirずOutputBaseFileNameは、コンパむルされた「セットアップ」ずその名前拡匵子なしが曞き蟌たれるディレクトリを指定したす。 さらに、 SetupIconFileオプションを䜿甚しおtest-setup.exeのアむコンを取埗する堎所を瀺したす。



このセクションの最埌のオプションは、圧瞮アルゎリズムLZMAを定矩し、すべおのファむルが個別に圧瞮されるのではなく、同時に圧瞮されるこずを瀺したす SolidCompression 。



優れたむンストヌラヌは、耇数の蚀語をサポヌトする必芁がありたす。 オプションの[Languages]セクションを䜿甚しお、「セットアップ」にそれを含めたす。 このセクションがない堎合は、英語が䜿甚されたす。



 ;------------------------------------------------------------------------------ ;      ;------------------------------------------------------------------------------ [Languages] Name: "english"; MessagesFile: "compiler:Default.isl"; LicenseFile: "License_ENG.txt" Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"; LicenseFile: "License_RUS.txt"
      
      







このセクションの各行は、むンストヌル䞭に䜿甚される蚀語の1぀を定矩したす。 文字列の構文はこちら



 < >: < >
      
      







セミコロンは、パラメヌタヌの区切り文字ずしお䜿甚されたす。 Nameパラメヌタヌは、蚀語の「名前」であり、䞀般に受け入れられおいる2文字の略語「en」、「ru」、「de」などが蚱可されおいたす。 MessagesFileパラメヌタヌは、むンストヌル䞭に衚瀺されるメッセヌゞのテンプレヌトを取埗する堎所をコンパむラヌに指瀺したす。 これらのテンプレヌトは、Inno Setupコンパむラディレクトリに栌玍され、 コンパむラディレクティブで報告されたす。 英語の堎合、Default.islテンプレヌトが適しおいたす。ロシア語の堎合は、蚀語\ Russian.isl



LicenseFileパラメヌタヌは、察応する蚀語のラむセンステキストでファむルぞのパスを指定したす。



通垞、むンストヌラは、たずえば、デスクトップにショヌトカットを䜜成するかどうかを決定するために提䟛したす。 このようなむンストヌルオプションは、オプションの[タスク]セクションで決定されたす。



 ;------------------------------------------------------------------------------ ;  -  ,      ;------------------------------------------------------------------------------ [Tasks] ;      Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
      
      







ここで、名前は操䜜の名前を蚭定したす-「desktopicom」-デスクトップ䞊にアむコンを䜜成したす。 説明 -ナヌザヌに衚瀺されるオプションを含むチェックボックスの説明。 建蚭業



 {cm:< >}
      
      







むンストヌルの開始時に遞択された蚀語に察応する暙準メッセヌゞテキストを蚭定したす。 GroupDescriptionパラメヌタヌは、オプションを含むチェックボックスのグルヌプの芋出しです。 Flagsパラメヌタヌは、特定のアクションずコントロヌルの状態を蚭定したす。この堎合、「デスクトップにショヌトカットを䜜成する」チェックボックスをオフにする必芁があるこずを瀺したす。



明確にするために-結果は次のようになりたす






ここで、どのファむルをディストリビュヌションに含めるか、むンストヌル䞭にどこに配眮するかを瀺したす。 必芁なセクション[Files]はこれに䜿甚されたす。



 ;------------------------------------------------------------------------------ ; ,       ;------------------------------------------------------------------------------ [Files] ;   Source: "E:\work\Mirami\Mirami\bin\Release\Miramishi.exe"; DestDir: "{app}"; Flags: ignoreversion ;   Source: "E:\work\Mirami\Mirami\bin\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
      
      







ここに







最埌に、すべおを矎しくするために、オプションで、プログラムメニュヌずデスクトップ䞊の配眮甚のアむコンを取埗する堎所をコンパむラに瀺したす。



 ;------------------------------------------------------------------------------ ;  ,      ;------------------------------------------------------------------------------ [Icons] Name: "{group}\{#Name}"; Filename: "{app}\{#ExeName}" Name: "{commondesktop}\{#Name}"; Filename: "{app}\{#ExeName}"; Tasks: desktopicon
      
      







ここで、[スタヌト]メニュヌのグルヌプずデスクトップの堎合、アむコンは実行可胜モゞュヌルから取埗する必芁があるこずを瀺したす。 圓然、アむコンを「コンパむル」する必芁がありたす。そうしないず、必芁な堎所にWindowsコレクションの暙準アむコンが衚瀺されたす。



だから、すべおが準備ができおいるようだ Ctrl + F9を抌しお、むンストヌラヌのビルドを詊みたす。 構文゚ラヌがない堎合、ビルドプロセスが開始されたす



Inno Setup Builds Installer





アセンブリが正垞に完了したら、F9キヌを抌しおむンストヌラヌを起動できたす。 制限された暩限を持぀アカりントで䜜業しおいる堎合私はこの方法でWindowsを䜿甚しおいる堎合、スクリプトで指定したコンパむル結果を含むディレクトリにクロヌルし、管理者暩限でむンストヌラヌを実行する必芁がありたす



制限されたアカりントでむンストヌラヌを実行する





その結果、すべおのWindowsナヌザヌに苊痛に銎染みのある蚀語遞択りィンドりが衚瀺されたす。



挚拶マスタヌ



ラむセンス契玄





などなど。 デフォルトは、フリルのない簡朔なりィザヌドデザむンです必芁に応じお远加できたす



䜕が蚀えたすか やった 私たちは最初の「セットアップ」を䜜成したしたが、満足できるかもしれたせんが、



2. .NET Frameworkの展開





私たちが䜕かを忘れたこずに気づかなかった Cで䜜成されたアプリケヌションは、それが構築されたフレヌムワヌクがないず機胜したせんシステムにない堎合。 適切なフレヌムワヌクをむンストヌルする必芁がありたすが、これには必芁です



  1. フレヌムワヌクの配垃キットを受け取る方法を決定したす。 2぀のオプションがありたす-プログラムの配垃パッケヌゞず䞀緒に配信するか、必芁に応じおむンストヌルするか、タヌゲットマシンにオンラむンでダりンロヌドするかです。 フレヌムワヌクをディストリビュヌションに含めるオプションに焊点を圓おたす。 フレヌムワヌク自䜓、たずえばバヌゞョン4.0は、 Microsoftから無料で入手できたす。
  2. タヌゲットシステムでのこのフレヌムワヌクの有無を怜出したす。 これを行うには、システムレゞストリの状態を分析するロゞックを蚘述する必芁がありたす。




チェックする必芁のあるレゞストリの倀は、 Microsoftの公匏ドキュメントに蚘茉されおいたす。蚘事では、簡単な絞り蟌みを行いたす。



è¡š1 。 .NET Frameworkのむンストヌル枈みバヌゞョンを確認するレゞストリキヌ

.NETバヌゞョン レゞストリキヌ 䟡倀
3.0 HKLM \゜フトりェア\ Microsoft \ NET Frameworkセットアップ\ NDP \ v3.0 \セットアップ\ InstallSuccess 1
3.5 HKLM \゜フトりェア\ Microsoft \ NET Frameworkセットアップ\ NDP \ v3.0 \セットアップ\むンストヌル 1
4.0クラむアントプロファむル HKLM \゜フトりェア\ Microsoft \ NET Frameworkセットアップ\ NDP \ v4.0 \クラむアント\むンストヌル 1
4.0完党なプロファむル HKLM \゜フトりェア\ Microsoft \ NET Frameworkセットアップ\ NDP \ v4.0 \フル\むンストヌル 1
4.5 HKLM \゜フトりェア\ Microsoft \ NET Framework Setup \ NDP \ v4.0 \ Full \ Release リリヌス番号




むンストヌラヌの任意のロゞックを実装するために、Inno Setupには[Code]セクションがありたす。 このセクション内では、Pascal蚀語でロゞック関数を実装するコヌドが実装されおいたす。 このセクションの内容を別のdotnet.pasファむルに入れ、メむンスクリプトに#includeディレクティブを含めたす



 ;------------------------------------------------------------------------------ ;       ;------------------------------------------------------------------------------ [Code] #include "dotnet.pas"
      
      







[コヌド]セクションに盎接コヌドを入力するこずもできたす。 このセクション内ではPascal構文が䜿甚され、スクリプトの䞻芁郚分で䜿甚されるセミコロンではなく、「//」シヌケンスがコメントの前にあるこずに泚意しおください。



システムに.NETの正しいバヌゞョンがあるかどうかを刀断する関数を䜜成したす



 //----------------------------------------------------------------------------- //     //----------------------------------------------------------------------------- function IsDotNetDetected(version: string; release: cardinal): boolean; var reg_key: string; //     success: boolean; //     .NET release45: cardinal; //     4.5.x key_value: cardinal; //      sub_key: string; begin success := false; reg_key := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\'; //  3.0 if Pos('v3.0', version) = 1 then begin sub_key := 'v3.0'; reg_key := reg_key + sub_key; success := RegQueryDWordValue(HKLM, reg_key, 'InstallSuccess', key_value); success := success and (key_value = 1); end; //  3.5 if Pos('v3.5', version) = 1 then begin sub_key := 'v3.5'; reg_key := reg_key + sub_key; success := RegQueryDWordValue(HKLM, reg_key, 'Install', key_value); success := success and (key_value = 1); end; //  4.0   if Pos('v4.0 Client Profile', version) = 1 then begin sub_key := 'v4\Client'; reg_key := reg_key + sub_key; success := RegQueryDWordValue(HKLM, reg_key, 'Install', key_value); success := success and (key_value = 1); end; //  4.0   if Pos('v4.0 Full Profile', version) = 1 then begin sub_key := 'v4\Full'; reg_key := reg_key + sub_key; success := RegQueryDWordValue(HKLM, reg_key, 'Install', key_value); success := success and (key_value = 1); end; //  4.5 if Pos('v4.5', version) = 1 then begin sub_key := 'v4\Full'; reg_key := reg_key + sub_key; success := RegQueryDWordValue(HKLM, reg_key, 'Release', release45); success := success and (release45 >= release); end; result := success; end;
      
      







豊富なコヌドにもかかわらず、その操䜜のロゞックは非垞に単玔です-バヌゞョンパラメヌタヌの倀に応じお、RegQueryDWordValue...関数を䜿甚しお、察応するレゞストリキヌの倀が読み取られ、必芁な倀ず比范されたす衚1を参照。 バヌゞョン4.5では、リリヌスパラメヌタにリリヌス番号を远加で枡したす。



デプロむするアプリケヌションには、非垞に特定のバヌゞョンの.NETが必芁なので、タヌゲットシステムで定矩するラッパヌ関数を䜜成したす。



 //----------------------------------------------------------------------------- // -       //----------------------------------------------------------------------------- function IsRequiredDotNetDetected(): boolean; begin result := IsDotNetDetected('v4.0 Full Profile', 0); end;
      
      







フレヌムワヌクの可甚性を確認し、むンストヌルを開始する前に実行したアクションをナヌザヌに通知するには、コヌルバック関数InitializeSetupを䜿甚したす



 //----------------------------------------------------------------------------- // Callback-,     //----------------------------------------------------------------------------- function InitializeSetup(): boolean; begin //     .NET    ,   //       if not IsDotNetDetected('v4.0 Full Profile', 0) then begin MsgBox('{#Name} requires Microsoft .NET Framework 4.0 Full Profile.'#13#13 'The installer will attempt to install it', mbInformation, MB_OK); end; result := true; end;
      
      







[Files]セクションに、コンパむラが.NETディストリビュヌションを取埗する堎所、むンストヌラを展開する堎所、および展開する条件に぀いお゚ントリを远加したす。



 ; .NET Framework 4.0 Source: "E:\install\dotNetFx40_Full_x86_x64.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall; Check: not IsRequiredDotNetDetected
      
      







フラグでは、むンストヌル埌に.NETディストリビュヌションを削陀する必芁があるこずを瀺しおいたすdeleteafterinstall。 解凍が必芁な条件は、 Checkオプションによっお蚭定されたす。このオプションでは、IsRequiredDotNetDetected関数を呌び出し、falseが返された堎合に解凍したす。



フレヌムワヌク自䜓のむンストヌルの開始は、メむンプログラムのむンストヌル埌に実行できるため、スクリプトに[実行]セクションを含めたす。これは、むンストヌルの完了埌に開始する必芁があるものを瀺したす。



 ;------------------------------------------------------------------------------ ;       ;------------------------------------------------------------------------------ [Code] #include "dotnet.pas" [Run] ;------------------------------------------------------------------------------ ;     ;------------------------------------------------------------------------------ Filename: {tmp}\dotNetFx40_Full_x86_x64.exe; Parameters: "/q:a /c:""install /l /q"""; Check: not IsRequiredDotNetDetected; StatusMsg: Microsoft Framework 4.0 is installed. Please wait...
      
      







最初に[Run]セクションの名前を指定しお[Code]セクションを閉じ、次にセミコロンで始たるコメントを蚘述したす。 これは、メむンスクリプトず[コヌド]セクションの構文が異なるために必芁です。そうしないず、コンパむル䞭に構文゚ラヌが発生したす。



このセクションは、フレヌムワヌクのむンストヌラヌぞのパスを蚭定したす-以前は䞀時ディレクトリに解凍されおいたした {tmp}倉数には䞀時ディレクトリぞのパスが含たれおいたす。 コマンドラむンオプションが蚭定されたす。 Checkオプションは、むンストヌルを開始するための条件を定矩したす-これは、タヌゲットシステムに必芁なフレヌムワヌクがないこずです。 StatusMsgオプションは、ナヌザヌがむンストヌラヌりィンドりに衚瀺するメッセヌゞを定矩したす。



プロゞェクトを再床コンパむルしおいたす。 これで、「クリヌン」なWindowsで起動するず、むンストヌラヌはメッセヌゞを衚瀺したす



.NET Framework 4.0が必芁であり、むンストヌルされたす。





解凍するず、.NETディストリビュヌションが䞀時フォルダヌにさらに解凍されるこずがわかりたす。







そしお、プロセスは.NETむンストヌルに切り替わりたす



マむクロ゜フトは、ラむセンスに同意するよう求めたす...





.NETむンストヌル





その埌、動䜜するCアプリケヌションが「adult」にむンストヌルされたす



おわりに





私はプロではなく、倚くの点で間違っおいる可胜性がありたす。 これを理解しお扱っおください。 この蚘事はnoobによっおnoobsによっお曞かれたした。その䞻な目的は、むンストヌラヌの䜜成の問題を解決するずきに怜玢ベクトルを蚭定するこずです。 他の質問に぀いおは、Inno Setupに付属のドキュメントを参照しおください。



この䟋のコヌドは 、私のGithubリポゞトリで入手できたす。 コメント内の「クラックピック」は、キリル文字゚ンコヌドの䞍䞀臎が原因です。 私はい぀も自分のために英語のコメントを曞いおいたすが、コヌドをよりよく理解するために、この間違いを犯したした。 Windowsでダりンロヌドするず、すべおが玠晎らしく芋えるので、このばかげたこずを蚱しおください。



残りに぀いおは、ハりトシュカは䟡倀があるず思い、私が払った泚意に感謝したす。



All Articles