WindowsでのQtアプリケーションの展開



エントリー



こんにちは、読者の皆さん! ごく最近、Qtアプリケーションの1つの開発を完了し、すべてが「大人のよう」になるようにプロフェッショナルなインストールプログラムを作成したいと考えました。 結局のところ、ツールキットの公式Webサイトには展開情報がほとんどないため、これを行うのは簡単ではありません。 この記事では、Qtバージョン5.2以降で他のユーザーのコンピューターに配布するプログラムを準備するいくつかの段階について説明します。 だから、ここにリーダーシップ計画があります:



  1. 展開のためのQtプロジェクトの準備
  2. プログラム配布レイアウト
  3. コード署名とインストーラーの作成


私たちは時間を無駄にせず仕事を始めます。



1.展開のためのQtプロジェクトの準備



指示に従うのを簡単にするために、簡単なQt Widgetsプロジェクトを作成します。 以降のすべての操作は、このプロジェクトに関連します。 以下は、アプリケーションのソースファイルの内容です。



HelloWorld.pro
QT += core gui widgets TARGET = HelloWorld TEMPLATE = app SOURCES += main.cpp
      
      







main.cpp
 #include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApplication a(argc, argv); QLabel label("Hello, world!"); label.setAlignment(Qt::AlignCenter); label.resize(200, 50); label.show(); return a.exec(); }
      
      







プログラムは、開発者、ソフトウェアのバージョン、著作権、言語などに関するメタデータを持っている場合、特に高品質でプロフェッショナルに見えます。 例として、ファイルPhotoshop.exeのプロパティをすべての既知のシステムAdobe Photoshopに対応させます。 次の図は、このファイルのプロパティウィンドウを示しています。







リソースファイルを使用しこの情報を追加できます 。 リソースファイルの拡張子は.rcで、アプリケーションで使用されるリソースを説明するテキストコードが含まれています。 このようなスクリプトは、WinAPIベースのVisual Studioプロジェクトで使用され、アイコン、文字列、識別子などのさまざまな記述子が含まれています。 Qtプロジェクトでは、これはほとんど意味がありませんが、プログラムに関する一般的な情報を含める必要があります。 以下は、リソースファイルのソースコードとプロジェクトファイルの内容です。これらも変更する必要があります。



resources.rc
 IDI_ICON1 ICON "icon.ico" #include <windows.h> #define VER_FILEVERSION 1,0,0,0 #define VER_FILEVERSION_STR "1.0.0.0\0" #define VER_PRODUCTVERSION 1,0,0 #define VER_PRODUCTVERSION_STR "1.0.0\0" #define VER_FILEDESCRIPTION_STR "HelloWorld" #define VER_INTERNALNAME_STR "Sensor" #define VER_LEGALCOPYRIGHT_STR "Copyright (C) 2015, MyCompany" #define VER_ORIGINALFILENAME_STR "HelloWorld.exe" #define VER_PRODUCTNAME_STR "Hello World" VS_VERSION_INFO VERSIONINFO FILEVERSION VER_FILEVERSION PRODUCTVERSION VER_PRODUCTVERSION BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904E4" BEGIN VALUE "FileDescription", VER_FILEDESCRIPTION_STR VALUE "FileVersion", VER_FILEVERSION_STR VALUE "InternalName", VER_INTERNALNAME_STR VALUE "LegalCopyright", VER_LEGALCOPYRIGHT_STR VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR VALUE "ProductName", VER_PRODUCTNAME_STR VALUE "ProductVersion", VER_PRODUCTVERSION_STR END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1252 END END
      
      







HelloWorld.pro
 QT += core gui widgets TARGET = HelloWorld TEMPLATE = app SOURCES += main.cpp RC_FILE = resources.rc
      
      







この例では、 resources.rc ファイルicon.icoファイルをプロジェクトソースファイルのあるフォルダーに追加することを忘れないことが重要です。 次の図は、アセンブリ後のプログラムプロパティウィンドウを示しています。







プログラムを管理者権限で実行する必要がある場合があります。 Qt内では、プロジェクトファイルの簡単な指示を使用してこれを実現できます。 以下は、プログラムが起動時に管理者権限を要求できるようにするコードです。



HelloWorld.pro
 QT += core gui widgets TARGET = HelloWorld TEMPLATE = app SOURCES += main.cpp RC_FILE = resources.rc win32 { CONFIG += embed_manifest_exe QMAKE_LFLAGS_WINDOWS += /MANIFESTUAC:"level='requireAdministrator'" }
      
      







上記の手順はすべて、Visual Studioビルドキットを使用する場合にのみ機能することが保証されていることに注意してください。 リソースファイルに関する詳細情報は、MSDNポータルの「 リソースファイルについて」セクションにあります。



2.プログラムの配布パッケージ



ユーザーのコンピューターにインストールする必要があるすべてのファイルを考慮して、アプリケーション配布パッケージを作成することは、おそらく最も難しい展開段階です。 プログラムの実行可能ファイルの依存関係を慎重に分析し、翻訳ファイルを処理し、アプリケーションリソースを忘れないようにする必要があります。 ビルドキットに付属しているWindeployqt.exeユーティリティは、これらの問題の解決に役立ちます。 このツールはコマンドラインで実行され、いくつかの構成オプションをサポートします。 次の図は、実行中のユーティリティを備えたコマンドプロンプトウィンドウを示しています。







最後のパラメーターは、コンパイル済みアプリケーションのバイナリファイルへのパスまたはこれらのファイルの名前を指定する必要があります。 次の表に、作業時に使用できるユーティリティパラメータを示します。

パラメータ 説明
-?、-h、-help ヘルプ出力
-v、-version バージョン情報を表示する
--dir < ディレクトリ > ファイルディレクトリの代わりに指定されたディレクトリを使用
--libdir < パス > ライブラリのコピー先のディレクトリ
-デバッグ ファイルのデバッグバージョンを使用する
-リリース リリースにファイルを使用する
--release-with-debug-info リリースにデバッグファイルを使用する
-力 既存のファイルを置き換える
-ドライラン 検証するための作業を実行する
--no-plugins プラグインのコピーをスキップ
-ライブラリーなし ライブラリのコピーをスキップ
--qmldir < ディレクトリ > 指定されたディレクトリからQMLインポートをスキャンします
--no-quick-import Qt Quickをスキップ
-翻訳なし 翻訳ファイルのコピーをスキップ
--no-system-d3d-compiler Direct3Dコンパイラのコピーをスキップする
-コンパイラランタイム コンパイラの依存関係のコピー
--no-compiler-runtime コンパイラの依存関係をスキップ
--webkit2 WebKit2ファイルをコピーする
--no-webkit2 WebKit2をスキップ
--json JSON出力の印刷
-角度 ANGLEファイルをコピー
-角度なし ANGLEをスキップ
--list < モード > コピーするファイルの名前のみを印刷します。 モード: sourcetargetrelativemapping

--verbose < レベル > デバッグレベル
-< ライブラリ名 > 指定したライブラリを追加
--no- < ライブラリ名 > 指定されたライブラリを追加しません


ユーティリティを起動すると、さまざまなライブラリとユーティリティファイルがプログラムの実行可能ファイルの近くに表示されます。これにより、アプリケーションが正しく実行され、多くのコンピューターで動作できるようになります。 以下の図は、配布構造を持つWindowsエクスプローラーウィンドウを示しています。







windeployqt.exeを使用する前に、このファイルへのパスをPATH環境変数に追加する必要があります。そうしないと、このツールは機能しません。



3.コードに署名してインストーラーを作成する



配布パッケージをコンパイルした後、管理者としてアプリケーションを実行してみてください。 次の図は、不明な発行元アプリケーションが開始されたことを警告するユーザーアカウント制御(UAC)システムサービスからのメッセージを示しています。







この警告はユーザーを怖がらせ、アプリケーションの評判を悪くします。 状況を修正するには、特別な証明書を使用してプログラムファイルに署名する必要があります。 開発者は、プログラムに署名することにより、情報セキュリティに関してアプリケーションの信頼性をさらに保証します。 オープンソースソフトウェア開発者は、 Certum Webサイトなどで、プロジェクトの証明書を無料で取得できます。 証明書を使用するには、アプリケーションファイルに署名する特別なプログラムが必要です。 これを行うには、便利なDigiCert証明書ユーティリティツールを使用できます。 次の図は、コードに署名するための証明書のリストを含むこのプログラムのウィンドウを示しています。







このユーティリティを使用した後、管理者としてアプリケーションを再度実行する価値があります。 以下は、プログラムの発行元情報を表示するUACメッセージです。







作業が完了したら、準備されたアプリケーションのインストーラー作成システムを選択することを検討します。 このタスクには有料製品と無料製品の両方があります。 次の表に、セットアッププログラムを作成するためのツールをいくつか示します。

有料 無料
InstallShield Qtインストーラーフレームワーク
セットアップ工場 NSIS
SetupBuilder イノセットアップ
スマートインストールメーカー WiX


特定のシステムの選択に関する推奨事項を提示することは困難です。 オープンソースのソフトウェア開発者は無料のツールを選択する可能性がありますが、有料製品は多くの場合、営利企業によって使用されます。



おわりに



結論として、リリースのためのアプリケーションの準備は大きな責任を持って行われるべきだと言わなければなりません。 プログラムを使用する前に、ユーザーはコンピューターへの製品のインストールフェーズを実行します。 彼が同時に受け取る情報は、好印象を与えるはずです。



All Articles