
この記事では、長年にわたってFamatechでインストーラーを作成して得た実践的な経験を紹介します。 カッターの下には、Windows Logo Testingと互換性のある方法で、無理なく「風水」の理論計算と実用的な指示があり、インストール言語の選択と選択した言語での製品のインストールを促すインストーラーを作成します。 この場合、独占的に無料のソリューションが使用されます。
多言語インストーラーが必要なのはなぜですか?
技術的な部分に移る前に、私は木について少し考えを広め、タンバリンとのこれらすべてのシャーマニックダンスが必要な理由を説明します。 それでは、典型的なWindowsインストーラーはどのようなものでしょうか? これは.msiまたは.exeファイルです。起動時に、どこに何を配置するかに関心があり、可能であればそれを配置し、ショートカットを作成してインストールしたプログラムを起動し、ユーザーがすぐに使用できるようにします。 おなじみの光景ですね。 これは、開発者の前にいるタスクがローカライズされたバージョンを作成するという栄光を得るまで、インストーラーがどのように見えるかです。 ロシア語、ドイツ語、中国語...本当に欲しいユーザー向け。
そして、原則として、プログラム自体に問題がない場合、インストーラは開発者をかなり興味深い選択肢の前に置きます。 オプションは何ですか?
- 最も簡単な解決策は、インストーラーの束を作成し、各インストーラーが目的の言語のユーザーインターフェイスを持ち、必要なファイルと設定でプログラムをインストールし、同じ言語でインターフェイスも表示されるようにすることです。 残念ながら、この方法にはわずかなマイナス点があります。ローカライズの数が増えると、30人以上のインストーラーの管理はあまり便利ではありません。 さらに、面白い瞬間がポップアップします。ユーザーが検索でプログラムを見つけた場合、その言語をサポートしていると横に書かれていれば、ダウンロードする可能性が高くなります。 悲しいかな、誰もが英語を知っているわけではありません。
- 1つのインストーラーを作成し、起動時にプログラム言語を自動的に選択できます。 これは、たとえば、人気のある7-zipユーティリティの64ビットバージョンの場合です。 残念ながら、この方法には多くの欠点もあります。 まず、英語を知らないユーザーは、インストーラーのインターフェイスに簡単に対応できません。 第二に、プログラムはしばしばシステム設定に基づいて起動時に言語を選択しますが、これはユーザーが本当に望むものに常に対応するとは限りません。 その結果、プログラムは多くの場合、ユーザーエクスペリエンスなどの微妙な問題に悪影響を及ぼす間違った言語でインターフェイスを推測して表示しません。
- インストーラーの起動時にインストーラーの言語とプログラムを選択するようにユーザーを招待することをお勧めします。 しかし、ここで私たちは純粋に技術的な困難に直面しています: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プログラムにあります。 多言語インストーラー、インターフェース言語の動的選択など。 スキャナーに関するコメントも受け付けています:)。