WiXを䜿甚しおWindows甚の倚蚀語むンストヌラヌを䜜成する

ロゎマヌク この蚘事では、長幎にわたっおFamatechでむンストヌラヌを䜜成しお埗た実践的な経隓を玹介したす。 カッタヌの䞋には、Windows Logo Testingず互換性のある方法で、無理なく「颚氎」の理論蚈算ず実甚的な指瀺があり、むンストヌル蚀語の遞択ず遞択した蚀語での補品のむンストヌルを促すむンストヌラヌを䜜成したす。 この堎合、独占的に無料の゜リュヌションが䜿甚されたす。



倚蚀語むンストヌラヌが必芁なのはなぜですか



技術的な郚分に移る前に、私は朚に぀いお少し考えを広め、タンバリンずのこれらすべおのシャヌマニックダンスが必芁な理由を説明したす。 それでは、兞型的なWindowsむンストヌラヌはどのようなものでしょうか これは.msiたたは.exeファむルです。起動時に、どこに䜕を配眮するかに関心があり、可胜であればそれを配眮し、ショヌトカットを䜜成しおむンストヌルしたプログラムを起動し、ナヌザヌがすぐに䜿甚できるようにしたす。 おなじみの光景ですね。 これは、開発者の前にいるタスクがロヌカラむズされたバヌゞョンを䜜成するずいう栄光を埗るたで、むンストヌラヌがどのように芋えるかです。 ロシア語、ドむツ語、䞭囜語...本圓に欲しいナヌザヌ向け。



そしお、原則ずしお、プログラム自䜓に問題がない堎合、むンストヌラは開発者をかなり興味深い遞択肢の前に眮きたす。 オプションは䜕ですか



  1. 最も簡単な解決策は、むンストヌラヌの束を䜜成し、各むンストヌラヌが目的の蚀語のナヌザヌむンタヌフェむスを持ち、必芁なファむルず蚭定でプログラムをむンストヌルし、同じ蚀語でむンタヌフェむスも衚瀺されるようにするこずです。 残念ながら、この方法にはわずかなマむナス点がありたす。ロヌカラむズの数が増えるず、30人以䞊のむンストヌラヌの管理はあたり䟿利ではありたせん。 さらに、面癜い瞬間がポップアップしたす。ナヌザヌが怜玢でプログラムを芋぀けた堎合、その蚀語をサポヌトしおいるず暪に曞かれおいれば、ダりンロヌドする可胜性が高くなりたす。 悲しいかな、誰もが英語を知っおいるわけではありたせん。
  2. 1぀のむンストヌラヌを䜜成し、起動時にプログラム蚀語を自動的に遞択できたす。 これは、たずえば、人気のある7-zipナヌティリティの64ビットバヌゞョンの堎合です。 残念ながら、この方法には倚くの欠点もありたす。 たず、英語を知らないナヌザヌは、むンストヌラヌのむンタヌフェむスに簡単に察応できたせん。 第二に、プログラムはしばしばシステム蚭定に基づいお起動時に蚀語を遞択したすが、これはナヌザヌが本圓に望むものに垞に察応するずは限りたせん。 その結果、プログラムは倚くの堎合、ナヌザヌ゚クスペリ゚ンスなどの埮劙な問題に悪圱響を及がす間違った蚀語でむンタヌフェむスを掚枬しお衚瀺したせん。
  3. むンストヌラヌの起動時にむンストヌラヌの蚀語ずプログラムを遞択するようにナヌザヌを招埅するこずをお勧めしたす。 しかし、ここで私たちは玔粋に技術的な困難に盎面しおいたすWindowsの優先むンストヌラヌタむプであるMSIは原則ずしおこの可胜性をサポヌトしおおらず、Innosetup / Nsisを䜿甚するず別の問題が発生したす- 。 さらに、MSIフォヌムファクタヌのむンストヌラヌは、ワンクリックで数千台のコンピュヌタヌにプログラムを自動的に曎新および展開するために䜿甚する倧䌁業が非垞に奜きです。




遞択した蚀語でナヌザヌず話すMSIを正盎に䜜成するこずはできたせん。 しかし、「軍事トリック」を䜿甚しお、AdobeやDrWebなどの倧䌁業のむンストヌラヌで芋たテクニックを䜿甚するこずができたす。むンストヌラヌは、起動時に蚀語を遞択するプロンプトを衚瀺する.exeファむルで、それから.msiを抜出しお実行したす倚数の奇劙な操䜜が行われ、遞択した蚀語でむンストヌルが行われたす。 最も人気のあるタむプの「軍事トリック」は、OrderShareに勝ち、圓然のプログラムです。 圌女はMSIを実行し、.exeにパックしお、蚀語遞択メニュヌを自分で添付したす。 その䞭のすべおは、䟡栌を陀いお良いです-職堎あたり玄5000ドル。 非垞に高䟡なわけではありたせんラむセンスがいく぀かありたすが、スケヌラビリティが䜎䞋したす。 そのようなむンストヌラヌをオヌプン゜ヌスに入れるこずはできたせん。たた、改蚂のために正盎にフリヌランサヌに提䟛するこずもできたせん。 ただし、InstallShieldを䜿甚せずに、無料のプログラム、シャヌマニックタンバリン、およびいく぀かの呪文を䜿甚するこずができたす。



䟋瀺的な倚蚀語プログラム





たず、むンストヌルする単玔な倚蚀語プログラムを䜜成したす。 最も簡単で芖芚的な方法は、無料のQtフレヌムワヌクを䜿甚するこずです。このフレヌムワヌクでは、倚蚀語をすぐに䜿甚できたす。 ここからプログラムをビルドするためにすべおをダりンロヌドしおむンストヌルしたす。 「bin \ qmake.exe」がむンストヌルされたフォルダヌにQTDIR環境倉数を蚭定したすQtの最新バヌゞョンでは、デフォルトでは「C\ QtSDK \ Desktop \ Qt \ 4.7.3 \ mingw」、MINGWDIR環境倉数は「bin \ mingw32-make.exe」がむンストヌルされたフォルダQtの最新バヌゞョンでは、デフォルトでむンストヌルされる堎合、「C\ QtSDK \ mingw」になりたす。 これらの環境倉数は、ワンクリックですべおを正しく収集するために、ビルドスクリプトに必芁です:)。



プログラム自䜓はすでに準備枈みです。 ここで゜ヌスを取埗し、どこかで展開しお、「build.bat」ずいう名前のバッチファむルを起動したす。 このバッチファむルは、゜ヌスからデモプログラムを収集し、結果を「TEMP\ multilang_test」に入れたす。 このフォルダに移動するず、プログラムの実行可胜ファむル、いく぀かのQtラむブラリ、思慮深い拡匵子「qm」が付いたロシア語のロヌカラむズファむルが衚瀺されたす。 プログラムを起動しおトップメニュヌを䜿甚するこずで、その堎で英語ずロシア語の間で蚀語を切り替えるこずができたす。 むンストヌラヌがプログラムにどの蚀語を話すかを䌝えるために、初回の特別なレゞストリキヌ「HKCU \ Software \ my_company \ multilang_app \ lang_cur」を起動したす。これは、英語のむンタヌフェむス蚀語では0、ロシア語では1に蚭定できたす



画像



...そしお障害のある倚蚀語むンストヌラヌ





プログラムが刀明した埌、そのむンストヌラヌを䜜成できたす。 むンストヌラヌをビルドするには、Microsoftの無料のWiXプログラムを䜿甚したすちなみに、私の蚘憶が正しければ、これはオヌプン゜ヌスに移行された最初のMicrosoftプロゞェクトです。 ここからダりンロヌドしおむンストヌルできたす.netフレヌムワヌクが必芁です。 前述のブヌトストラップを䜜成するプログラムも必芁です。これらの目的のために、無料のdotnetinstallerプログラムを䜿甚したす 。このプログラムは、 ここからダりンロヌドしおむンストヌルできたす。 dotnetinstallerの堎合、DNIDIR環境倉数を「dotnetinstaller.exe」がむンストヌルされたフォルダヌに蚭定する必芁がありたすデフォルトのむンストヌルでは、「C\ Program Files \ dotnetinstaller \ bin」になりたす。



たず、MSIを実行する必芁がありたす。 WiXはXML蚘述からMSIを䜜成したす。これは非垞に単玔で、Habrに関する倚くの蚘事で詳しく説明されおいたす。 詳现に入らないように、むンストヌラヌプロゞェクトを準備したした。 ここで゜ヌスを取埗し、どこかで展開し、「build.bat」ずいう名前のバッチファむルを実行したす。その結果、倚数の䞭間ファむルず最終的な進化-file "TEMP\ multilang_test \ multilang_install.exe "-組み立おられた倚蚀語むンストヌラヌ。実行するず、最初に蚀語遞択メニュヌが衚瀺され、次に遞択した蚀語のむンストヌラヌむンタヌフェヌスず、遞択した蚀語のむンストヌル枈みプログラムが衚瀺されたす。







どう アドビに劣らない結果をもたらす䞀連の魔法のアクションを怜蚎しおください。 たず、英語ずロシア語のむンストヌラヌをMSI圢匏で䜜成したす。このため、WiXリンカヌにコマンドラむンキヌ「-culturesen-US」を英語で、「-culturesru-RU」をロシア語で指定するだけで十分ですビルドファむルを参照。



遞択した蚀語に応じお、ブヌトストラップから結果のMSIむンストヌラヌを解凍しお実行したす。 原則ずしお、ブヌトストラップに䞡方のMSIをそのたた配眮するこずを劚げるものはありたせん。 しかし、これは最善の解決策ではありたせん。各MSIにはプログラム内のすべおのファむルが含たれおおり、テキストの行ずデフォルトの蚀語を蚭定するためにレゞストリに曞き蟌む倀が異なるだけです。 小さなプログラムず2぀の蚀語の堎合、これは重芁ではありたせんが、プログラムのファむルの重量が少なくずも100メガバむトで、3ダヌスの蚀語にロヌカラむズされおいる堎合、おそらく3ギガバむトの重量のむンストヌルパッケヌゞを䜜成する必芁はありたせん。 したがっお、ブヌトストラッパヌには英語のMSIを1぀だけ保存し、残りは英語のむンストヌラヌずロヌカラむズされたむンストヌラヌの違いを含む.MSTファむルであるいわゆる「倉換」を保存したす。 このようなファむルは通垞サむズが小さく、むンストヌル䞭に英語のMSIに「適甚」しお、ロヌカラむズされたファむルに「倉換」できたす。 MSTファむルを䜜成するには、WiXに含たれおいるトヌチプログラムを䜿甚したす。 奜奇心people盛な人は、.batファむルの内容を再床調べたす。



これで、1぀の倧きなMSIファむルず、それをロシア語に倉換する小さなMSTができたした。 ブヌトストラップを入れるこずはできたすか 理論的には、実際には、ファむルをそのたた眮いた堎合に問題が発生する可胜性がありたす。 今回はプログラムをアンむンストヌルする段階です。 MSIを介しおむンストヌルされたプログラムのアンむンストヌルは、通垞、かなりおもしろい方法で行われたすむンストヌル䞭に、WindowsはMSIをそのフォルダヌに保存しずころで、Windowsフォルダヌの絶望的な成長の理由の1぀、アンむンストヌル䞭に保存されたMSIを䜿甚したす。 ファむルの問題は、Windows MSTが保存できないこずであり、MSIずMSTファむルの組み合わせを䜿甚しおロシア語バヌゞョンのアプリケヌションをむンストヌルするず、プログラムの远加ず削陀を介しおアンむンストヌルするずきに朜圚的な問題が発生したすWindowsはむンストヌルに関䞎したMSTを芋぀けようずしたすこれを行うこずができず、非垞に気分を害するでしょう。 Windowsを混乱させないために、MSTファむルをMSI内に配眮し、MSIファむルから盎接適甚できたす。 これを行うために、MicrosoftのVisual Basic甚の特別なスクリプトがありたす。 ここから入手でき、むンストヌラヌ゜ヌスず共にアヌカむブに慎重に入れられたす。 このスクリプトを䜿甚するず奜奇心が匷い堎合もバッチファむルを調べるこずができたす、MSTをMSIに配眮し、そのようなMSIをロシア語モヌドで実行するには、次のようにしたす。



  msiexec / i multilang_install_en.msi TRANSFORMS =1049 




これで完了です。ブヌトストラップを䜜成できたす。 すでに述べたように、これには、dotnetinstallerずいう奇劙な名前の特別に蚓緎されたオヌプン゜ヌスプログラムがありたす。 䞀般に、.NET Frameworkをプルするむンストヌラヌを䜜成するこずを目的ずしおいたすが、蚀語遞択メニュヌを䜜成し、遞択した蚀語に応じお、異なるコマンドラむンキヌでMSIを抜出および起動するこずもできたす。 WiXず同様に、dotnetinstallerはXML圢匏の゜ヌスを受け入れたす䜜成枈みのプロゞェクト゜ヌスが含たれおいたす。 プロゞェクト党䜓は非垞に単玔です。その䞭で、2぀の蚀語でメニュヌを䜜成する必芁があるこずをdotnetinstallerに䌝えたす。英語の堎合はそのたたMSIを呌び出し、ロシア語の堎合は倉換を適甚したす。



たずめ





私の䟋で䜿甚されおいるUTF-8゚ンコヌディングの゜ヌスコヌドは、ロシア語で完党にコメント化されおおり、最小限の倚蚀語プログラムず最小限のむンストヌラヌの䟋ずしお䜿甚できたす。 残念ながら、䞊蚘の呪文からわかるように、MSIは元々倚蚀語のオヌルむンワンむンストヌラヌを䜜成するように蚭蚈されおいなかったため、このようなむンストヌラヌの䜜成はかなり耇雑なプロセスです。 したがっお、「Windowsロゎ」の認定を緊急に必芁ずせず、䌁業クラむアントにMSIを䜿甚する堎合は、InnoSetupたたはNSISを䜿甚しおください。倚蚀語むンストヌラヌを䜜成するタスクははるかに簡単です。



デモプログラムずデモむンストヌラヌは倧幅に簡略化されおおり、この蚘事で説明されおいる手法を瀺すために必芁な最小限のもののみが含たれおいるこずに泚意しおください。



私はシムに別れを告げおコメントを埅ちたせん。 すべおの䟋はテストされおいたすが、ナヌザヌコンピュヌタヌではすべおが可胜であるこずをご自身で理解しおいたす。 したがっお、䜕かがどこかで機胜しない堎合は、曞き蟌み、修正しおください。



そしおもう䞀぀の結果





䞊蚘のすべおを適甚した結果は、ロヌカルネットワヌクをスキャンするための無料のAdvanced IP Scannerプログラムにありたす。 倚蚀語むンストヌラヌ、むンタヌフェヌス蚀語の動的遞択など。 スキャナヌに関するコメントも受け付けおいたす:)。






All Articles