Files
docview/docs/WINDOWS-BUILD.md
2026-09-21 13:41:40 +09:00

5.7 KiB

Windowsビルドと未検証項目

Windows向けコードと試験を用意したが、Windows SDK・MSVC・Windows版Qtを利用できる環境は今回提供されていない。以下は実装したビルド経路であり、実行済みの手順や動作保証ではない。Windows 11でのコンパイル、実行、隔離攻撃試験、クリーン環境への配置が必要である。

環境を新規作成する場合、MicrosoftのWindows 11 Enterprise評価版は利用登録後の90日評価を案内している(2026-09-19確認)。利用可能なISO・利用条件・必要なアカウントを確認してから専用VMへ導入する。旧Developer VMの英語URLは確認時点で開発環境案内へ転送され、既成VMの現行配布元としては確認できなかった。Windows VMはまだ作成していない。

必要なもの

  • Windows 11 x64、対応するMSVC x64コンパイラとWindows SDK。dumpbinを実行できるDeveloper PowerShellを使用する。
  • 同じツールチェーン向けのQt 6.11.2。Core、Gui、Network、Qml、Quick、QuickControls2、WebEngineQuick、Xml、LinguistTools、Test、QuickTestとwindeployqtが必要。Qtの日本語翻訳資源(qtbase_ja.qm、qtdeclarative_ja.qm、または配置ツールが統合したqt_ja.qm)も配置する。
  • libzip 1.11以上、toml++ 3.4以上、qpdf 12.4.1のCMakeパッケージ。libzip/libqpdfとその依存DLLは同じアーキテクチャ・ランタイムで用意する。
  • CMake 3.24以上、Ninja、Python 3.12以上。
  • ビルドしたアプリに対応する公式Microsoft Visual C++ Redistributable。開発機のCRT DLLを自動で収集・再配布する構成にはしていない。

PDFiumはLinux版と同じ固定コミットのWindows x64成果物を取得する。V8とXFAは無効で、bin/pdfium.dllとlib/pdfium.dll.libを使う。取得元とハッシュは lock に固定した。

このWindows providerには、Linuxで検証した第2候補の描画修正をまだ組み込んでいない。以下は元のproviderでビルド経路を確認する手順であり、修正版の完成手順ではない。Windows用PDFiumへの同修正の適用・ビルド・色とパターンの回帰試験も残っている。Linux用の共有ライブラリーと固定lockをWindowsへ流用しない。

構成・試験・配置

以下のQtと依存ライブラリの場所を実際の配置先へ置き換える。

$env:CMAKE_PREFIX_PATH = "C:/Qt/6.11.2/msvc2022_64;C:/docview-dependencies"
python cmake/fetch_pdfium.py --platform windows-x64 --destination .deps/pdfium-windows
cmake -S . -B build-win -G Ninja -DCMAKE_BUILD_TYPE=Release -DDOCVIEW_PDFIUM_ROOT="$PWD/.deps/pdfium-windows"
cmake --build build-win --parallel 6
ctest --test-dir build-win --output-on-failure --output-junit tests.xml
cmake --install build-win --prefix "$PWD/build-win/install"
& ./build-win/install/bin/docview.exe ./tests/fixtures/pdf/navigation.pdf

実機ではQtが使用するGPU・表示環境とChromium sandboxを有効にする。保護を無効にする引数や環境変数で試験を通さない。基礎試験資料は同梱し、追加生成手順は README に記載した。

ワーカーのリンク後、dumpbinとCMakeのPE依存解析を使い、必要なDLLを実行ファイルの隣へ収集する。未解決依存、異なる内容の同名DLL、大小文字だけが異なる名前はビルド失敗とする。Windows API-setとOSのDLLは収集対象から除外する。特殊な再配布DLLを追加する場合のみ、DOCVIEW_EXTRA_WORKER_RUNTIME_DLLSに再配布可否を確認した絶対パスを指定する。

各*.exe.runtime.jsonは、ワーカー本体と有限個のDLLの名前・サイズ・SHA-256を記録する。起動時には全て照合して個別の一時領域へコピーし、そのコピーにだけAppContainerアクセス権を設定する。DLL更新時に古いDLLとの衝突が出る場合は、依存構成を確認して新しいビルドディレクトリーを用意する。既存の異なるDLLを無条件に上書きしない。

cmake --installはワーカーの一覧とハッシュを再検証し、GUI用Qtプラグイン・QML・WebEngine資源をwindeployqtで配置する。--nopatchqtでQt DLLの変更を止め、明示したqt.confで配置先を指定する。配置後もワーカー依存のハッシュを検証する。これはインストーラー作成、署名、アンインストール、ライセンス告知を完了する処理ではない。QtのWindows配布手順

Windows固有の試験

windows_pipeは非同期通信、上限、切断と取消、windows_resourcesはhardlink/reparse・名前変更・原子的公開、windows_workerは本番LPAC内の要求順序、不正応答、異常終了、原本・兄弟ファイル・設定・通信・子プロセス・余分な継承ハンドル・自身のprofile書込拒否を試す。追加試験用ワーカーは製品installの対象に含めない。GUI試験の履歴と資源は明示した一時保存先を使用する。

これらはWindowsではまだ実行していない。Linuxでのmanifest生成・コピー試験は合成MZファイルを使うため、PE依存解析やLPACの成立を証明しない。Windowsのフォント代替、profile回収、WebEngine renderer監視、Known Folders、IME、表示倍率、配布については 隔離の実装と残作業 と 受入対応表 を参照する。