CLOSE

こんにちは。エイタです!

以前、PowerBuilder 2019 R3 で作成したアプリケーションの実行に必要となるランタイムについて、【2019 R3】ファイルコピーによるランタイムの配布とアプリケーションの実行で解説しましたが、バージョン 2022 R3 の機能追加や廃止に伴って追加/削除されたランタイムがあります。

新機能の追加によって増えたランタイムはもちろんですが、既存システムのマイグレーションだけの場合でも、名前が変更されていたり新たに配布が必要になったりするランタイムもあります。
開発環境からランタイムをコピーするときに「どれを配布すればいいんだっけ?」と思ったときに参考になれば幸いです。

それでは、前回と同様にマニュアルの記載に沿った説明とあわせて、2019 R3 からの変更についても解説していきますね!

ランタイムの種類

2019 R3 と同様に、 (1) コアランタイム(2) Microsoft ファイル(3) 機能ごとのランタイム、そして (4) DB インターフェイスのランタイムの 4 つに分けられます。
また、開発環境でのランタイムのインストール場所は 2019 R3 と変わらず、ランタイムは下記のフォルダーにあります。

[32-bit 用]

C:\Program Files (x86)\Appeon\Common\PowerBuilder\Runtime [バージョン番号]

[64-bit 用]

C:\Program Files (x86)\Appeon\Common\PowerBuilder\Runtime [バージョン番号]\x64

(1) コアランタイム

このランタイムは PowerBuilder アプリケーションを動かすためのベースとなるランタイムです。 こちらはすべて配布することが推奨されています。

ファイル名説明
pbvm.dllすべてに必要
libjcc.dll ※
libsybunic.dll ※
pbshr.dll
pbuis.dll
すべてに必要 (pbvm.dll は、このファイルに依存しています)
libjtml.dll ※
libjutils.dll ※
nlwnsck.dll ※
すべてに必要 (libjcc.dll は、このファイルに依存しています)
AtlAuxiliary.dllInkEdit、InkPicture および RichText のサポート
pbcomrt.dll ※COM/COM+ のサポート
pbcrypt.dll暗号化と復号のサポート
pbdpl.dllデータパイプラインのサポート
pbdwe.dll
pbdwr220.pbd ※
データウィンドウとデータストアのサポート
pbresource.dllPowerBuilder リソースファイル
pbsysfunc.dllシステム関数
pbtra.dll
pbtrs.dll
データベース接続のトレース

※印がついたファイルは 64-bit アプリケーションでは不要です。

2019 R3 との違いは、Java がサポートされなくなったことに伴って pbjvm.dllpbjag.dll が削除され、インクエディットなどをサポートするために AtlAuxiliary.dll が追加されています。
また、暗号化/復号のための pbcrypt.dll がコアランタイムに格上げ (?) されていますね。逆に、アクセシビリティ機能関連のランタイムである pbacc.dllPBAccessibility.dll が機能ごとのランタイムとして扱われるようになり、コアランタイムからは外されています。
そのほか、細かいところだと pbdwr.pbd にバージョン表記がついて pbdwr220.pbd になっています。 あ、64-bit では不要になったランタイムもいくつかありますね (libjcc.dllpbdwr220.pbdpbcomrt.dll)。

(2) Microsoft ファイル

PowerBuilder のランタイムを動かすために必要となるランタイムです。 絶対に必要ですが、すでに端末に「Visual C++ 再頒布可能パッケージ」がインストールされていれば、コピーする必要はありません。

[32-bit]

vcruntime140.dll、concrt140.dll、msvcp140.dll

[64-bit]

vcruntime140.dll、vcruntime140_1.dll、concrt140.dll、msvcp140.dll

PowerBuilder の中身も、2022 R3 では新しい VC++ バージョンでコンパイルされているようですね。
ちなみに、これらのファイルは「ランタイム パッケージャ」で作成したランタイムインストーラーを実行するためにも必要です。 「ランタイム (PB) の配布のために事前にランタイム (VC++) が必要になる」ので、少しややこしいですね。

(3) 機能ごとのランタイム

Excel や PDF でのファイルの出力、圧縮や暗号化、Web ブラウザーの利用など、アプリケーションに実装した機能によって必要となるランタイムです。

ファイル名説明
pbacc.dll, PBAccessibility.dllUI アクセシビリティと自動化のサポート (米国リハビリテーション法 508 条)
pbcompression.dll圧縮と展開のサポート(CompressorObject と ExtractorObject で使用)
PBDOM.pbxPB DOM
PBDotNet.dll, PBDotNetInvoker.dll, PBDotNetCoreInvoker.dll, PBDotNetFrameworkInvoker.dll, Ijwhost.dll, pbdotnetinvoker.runtimeconfig.json.NET アセンブリ 呼び出し
PBDWExcel12Interop.dll, Sybase.PowerBuilder.DataWindow.Excel12.dllMS Excel12 のサポート
pbhttpclient.dllHTTPClient のサポート
pbjson.dllJSON のサポート
pblab.iniラベルデータウィンドウ提示様式の定義済みフォーマット
PBMSText.dll, pbrtc.dllMicrosoft RichEdit コントロール (64-bit) (廃止)
pboauth.dllOAuth 2.0 のサポート
pbpdf.dll, pdflib.dllNativePDF (NativePDF! メソッドを使用してデータウィンドウを PDF ファイルとして保存) のサポート
pbpdfbuilder.dll, pdflib.dll, NotoSans-Bold.ttf, NotoSans-Regular.ttfPDF Builder のサポート
pbrestclient.dll (および依存する DLL: pbhttpclient.dll, pboauth.dll, pbcompression.dll, pbjson.dll)RESTClient のサポート
PBRibbonBar.dll (および依存する DLL: PBXerces.dll, xerces-c.dll, pbjson.dll)RibbonBar のサポート
pbsmtpclient.dll, libcurl.dllSMTPClient のサポート
pbtabbedbar.dllTabbedView のサポート
pbtheme.dll, pbjson.dll および “theme” フォルダー (“theme” フォルダは、”%AppeonInstallPath%\PowerBuilder [version]\IDE” ディレクトリから手動でコピーする必要があります)UI テーマのサポート
pbtxtext.dll, pbrtc.dll, mfc120u.dll, msvcr120.dll, tx4ole31.ocx, tx31.dll, tx31_css.dll, tx31_doc.dll, tx31_dox.dll, tx31_htm.dll, tx31_ic.dll, tx31_obj.dll, tx31_pdf.dll, tx31_rtf.dll, tx31_tls.dll, tx31_wnd.dll, tx31_xlx.dll, tx31_xml.dllTX Text Control ActiveX
pbwebbrowser.dll, webbrowserapi.tlb および “PBWebView2” フォルダー (“PBWebView2” フォルダーは、WebView2 ランタイム固定バージョンが使用される場合にのみ必要です)WebBrowser のサポート
PBXerces.dll, xerces-c.dllXML サポート (データウィンドウ\データストア用)

前バージョンから、だいぶ変更がありますね。
すべては紹介できませんが、目を引くのは PDF BuilderSMTPClientTabbedView といった、2022 R3 で新しく追加された機能をサポートするためのランタイム群。
既存システムを 2022 R3 へマイグレーションするだけであれば、これらのランタイムは不要かもしれませんが、いずれも強力な新機能になっています。既存システムにも組み込んでもらって、配布されるようになったらうれしいなぁ・・・。

また、2019 R3 からすでに追加されている .NET アセンブリ呼び出し機能の “.NET DLL Importer” なんですが、「ターゲットに .NET DLL を取り込むための機能だったら実行環境には必要ないのでは?」と疑問を持っている方もいるかもしれません。
じつは、Importer と名前はついていますが、実際は「取り込んで」いるのではなく、.NET DLL を動的に読み込む処理 (オブジェクト) を自動で生成しているだけなので、実行環境でも C# DLL を読み込むためにランタイムが必要になるんです。

そのほかは、RichTextEdit のバージョンや WebBrowser のエンジンの一本化、また、内部的な変更があったであろうファイル変更などがあります。

(4) DB インターフェイスのランタイム

最後にデータベースインターフェイスです。
データベースに接続するために必要になります。 ご利用のデータベースと接続方法に合わせて選択してください。

ファイル名対象のデータベース
pbin9.dllInformix v9.x (IN9)
pbi10.dllInformix v10.x、v12.x および v14.x (I10)
pbo90.dllOracle 9i (O90)
pbo10.dllOracle 10g (O10)
pbora.dllOracle 11g 以降 (ORA)
pbmsoledbsql.dllSQL Server (MSOLEDBSQL)
pbsnc.dllMicrosoft SQL Server (SNC)
pbase.dllAdaptive Server 15.x および 16.x (ASE)
pbsyc.dllAdaptive Server Enterprise (SYC)

DirectConnect と OData による接続のサポートが廃止されたことによりインターフェイスも削除されています。それ以外は 2019 R3 と変わっていないです。


以上が主なランタイムファイルです。 この中から必要なファイルを選択していけば動くはずです。 もし外部関数などで他社のライブラリを使用している場合には別途配布するのを忘れずに。

ランタイムを配布したのにアプリケーションが実行できない?

「あるある」ですね。

そのバージョンのランタイムが見つからないよー😭(↓画像参照)みたいな。 きっとだいたいこのパターン。

左側のメッセージはうまくランタイムが参照できていないようですね。ランタイムを配布した場所は EXE から参照できるところですか?
XML を配布していない場合、参照できるのは EXE と同じフォルダーか環境変数 PATH に登録された場所だけ。 配置を変えるか、PB ランタイムがある場所を PATH に登録してください。

右側のメッセージは EXE と一緒に配布した XML に記述されているパスが間違っているようです。”<アプリケーション名>.XML” は『PB ランタイムの場所はここだよ!』と示しているファイルです。 PowerBuiler アプリケーションは従順なので、XML ファイルが存在する場合はそのパスしか見ません。ランタイムパッケージャで作成したインストーラーでランタイムを配布した場合は、XML にそのインストール先を設定してみてください。
そもそも、PowerBuilder ランタイムを EXE と同じフォルダーにコピーしたのであれば XML ファイルは不要です。 削除しちゃいましょう!

それでもだめなら・・・トラブルシューティングを読むと解決するかも。

まとめ

アプリケーションの実行に必要な PowerBuilder ランタイムですが、配布漏れが原因で起動できなかったという話をよく聞きます。 特に、新しいバージョンへのマイグレーションを実施した際に、これまでのバージョンにはなかったランタイムの配布が必要となるケースもあるので、アプリケーションに実装した機能とその実行に必要なランタイムを照らし合わせて確認し、改めて下記をチェックしてみてください!

  • 不足しているランタイムファイルはないか?
  • ランタイムファイルは参照できる位置に格納されているか?
  • ランタイムファイルのプロセス (32-bit/64-bit) は合っているか?
  • 動的ライブラリ (PBD/DLL) に配布漏れはないか?
  • 動的ライブラリを配布しない場合、データウィンドウオブジェクトをリソースファイルに含めているか?

不安な場合は「ランタイム パッケージャ」を使ってランタイムを配布するのがおススメです。Web 経由で EXE もランタイムも配布できてしまう PowerServer や PowerClient を利用するという手もアリですよ!

以上、エイタでした!

x instagram facebook youtube