2020年1月12日日曜日

26: LibreOfficeまたはApache OpenOfficeのWindowsサービスを作成する

<このシリーズの前の記事 | このシリーズの目次 | このシリーズの次の記事>

例えば、ファイルコンバージョンサーバーとして。それは、とても簡単ですが、いくつか秘訣があります。

話題


About: UNO (Universal Network Objects)
About: LibreOffice
About: Apache OpenOffice
About: C#

この記事の目次


開始コンテキスト



ターゲットコンテキスト



  • 読者は、C#によるLibreOfficeまたはApache OpenOfficeのWindowsサービスを入手し、そうしたWindowsサービスを作成する方法を知る。
ト書き
Hypothesizer 7、Objector 26A、Objector 26Bがコンピューターの前にいる。


オリエンテーション


Hypothesizer 7
本記事では、C#によるLibreOfficeまたはApache OpenOfficeのWindowsサービスのサンプルを入手し、そうしたWindowsサービスを作成する方法を知ります。

Objector 26A
それはいい。それは使えるね。実のところ、私は、Windowsサービスを1つも作ったことがない。

Hypothesizer 7
ああ、サー、実のところ、Windowsサービスを作成するのはとても簡単です、IDEを使っても、IDEを使わなくても

Objector 26A
...えーと、Windowsサービスを作りさえすれば、あとはただ、Windowsサービス内で、オフィスプログラムを起動してそのプロセスを殺すだけだろう?

Hypothesizer 7
一部のユースケースではそれも許容できるかもしれませんが、何らかのファイルに書き込みをしているかもしれないプロセスを残忍に殺すのは、あまり望ましくはないでしょう。それに、ある措置を取らないと、'soffice --convert-to'のようなコマンドがオフィスインスタンスをシャットダウンしてしまいます

Objector 26A
えーと...

Objector 26B
オフィスWindowsサービスは、別のプログラミング言語でも作れるんでしょう?

Hypothesizer 7
マダム、その通りです。使われるのはCLRなので、他のどの.NET Frameworkプログラミング言語(Visual Basic.NETまたはC++/CLIが人気のある選択肢でしょうし、F#も使えるようです)でもできるはずです。C++(アンマネージド)も使えますが、多分、はるかに多くのコードが必要になるでしょう(実のところ、私はかつて、Win32 APIを用いてC++ Windowsサービスを作成しました)。Javaですか?よく知りませんが、ピュアJavaではできないでしょう。


本体


1: オフィスWindowsサービスがするべきこと


Hypothesizer 7
オフィスWindowsサービスが何をすべきかは、以前の記事のあるセクションで既に説明しておりますので、そちらをご参照ください。

Objector 26A
...それでは、オフィスWindowsサービスはオフィスインスタンスを起動し、それから、そのオフィスインスタンスへのUNOクライアントになると?

Hypothesizer 7
はい、それが、コンソールC# UNOクライアントを作成する方法をご存知でなければならない理由です。


2: オフィスWindowsサービスを取得してビルドする


Hypothesizer 7
ここにオフィスWindowsサービスがあります。

'officeWindowsService'が、オフィスWindowsサービスプログラムのプロジェクトディレクトリです。他の2つのディレクトリはプロジェクト群で共用されるプロジェクトのものです('coreUtilitiesToBeDisclosed'には、あらゆる種類のプロジェクトで共用されるように想定されているユーティリティコードが含まれています。'unoUtilitiesToBeDisclosed'には、UNOプログラムのプロジェクト群で共用されるように想定されているユーティリティコードが含まれています)。

本シリーズの任意のサンプルプロジェクトをビルドする方法は、ある以前の記事に記述されています。


3: Windowsサービスを登録する


Hypothesizer 7
オフィスWindowsサービスをテストしましょう、オフィスWindowsサービスプログラムをターミナル上で実行することによって。ご注意いただきたいのですが、テストなどパスしたいと思うかもしれませんが、これは、使用されるライブラリ群をオフィスWindowsサービスプログラムディレクトリへコピーするために必要です。

準備として、'URE_BOOTSTRAP'というシステム環境変数をLibreOfficeまたはApache OpenOfficeの'fundamental.ini'ファイルのURL(例えば、'file:///D:/libreOffice/program/fundamentalrc.ini')にセットしなければなりません。

また、オフィスポートを、ある以前の記事に記述されているようにオープンしなければなりません、勿論。



以下が、テスト実行コマンドです、カレントディレクトリをオフィスWindowsサービスプロジェクトディレクトリに位置させ、オフィスディレクトリパスおよびポート番号を環境に合わせて。

@cmd ソースコード
gradle i_executeCsharpExecutableFileTask -Pc_commandLineArguments="%the office directory path%\program socket,host=localhost,port=%the port number%,tcpNoDelay=1;urp;StarOffice.ComponentContext"

もしも、'### Press any key to stop this Windows service.'というメッセージが表示されたら、プログラムは正常に起動したはずです。もしも、プログラムがあるキーを押した後にエラーなしに停止したら、プログラムは正常に終了したはずです。

そうしたら、Windowsサービスを登録するために、以下のようなコマンドを実行します、複数の'%~%'を実際の値で置換して。

@cmd ソースコード
sc create OfficeWindowsService start=demand binpath="%the development directory path%\officeWindowsService\target\theBiasPlanet.officeWindowsService.cs.exe% %the office directory path%\program socket,host=localhost,port=%the port number%,tcpNoDelay=1;urp;StarOffice.ComponentContext" obj=%the computer name%\%the operating system user name% password=%the operating system user password%


4: コードの若干の説明


Hypothesizer 7
コードの入念な説明は必要ないと思いますが、コードを読むための若干のガイダンスを提示しましょう。

'theBiasPlanet.coreUtilities.processesHandling.ProcessHandler.execute (String a_workingDirectoryPath, List <String> a_commandAndArguments, bool a_waitsUntilFinish)'というメソッド('theBiasPlanet\officeWindowsService\programs\OfficeWindowsService.cs'で呼ばれている)は、私のユーティリティメソッドであり、外部プロセスを同期または非同期に起動します(最後尾引数が'false'の場合に非同期)。

オフィスインスタンスへの接続は、以前の記事にしたがって行なわれます。

オフィスインスタンスの制御は、'unoUtilitiesToBeDisclosed'プロジェクト内にある'theBiasPlanet.unoUtilities.officeInstancesHandling.OfficeInstance'クラスによって行なわれます。

Objector 26A
ふーむ...、そのクラスはあなたの以前の記事が示唆する通りにやってるね、確かに。


5: 結びとその先


Hypothesizer 7
これで、C#によるLibreOfficeまたはApache OpenOfficeのWindowsサービスを取得し、そうしたWindowsサービスを作成する方法を知りました。

実のところ、そのWindowsサービスは、これまでに獲得してきたいくらかの知識(オフィスインスタンスをUNOサーバーにする方法コンソールC# UNOクライアントを作成する方法C#によるWindowsサービスを作成する方法)に、オフィスインスタンスをある程度コントロールするというほんの少しの事を加えた成果です。

そのオフィスWindowsサービスは、LibreOfficeまたはApache OpenOfficeのある種の使用法のためのとても有用なツールです、ファイルコンバータとして使用するといったような使用法の。

LibreOfficeまたはApache OpenOfficeをファイルコンバーターとして最適に使用する方法についての記事がいくらかあり(コンセプトあるJava実装あるC++実装あるC#実装あるPython実装あるLibreOffice Basic実装)、パスワードで暗号化するためのドキュメント格納フィルタープロパティ群についての記事があります(他のいくつかのドキュメント格納フィルタープロパティ群(PDFドキュメント格納フィルタープロパティ群、CSVドキュメント格納フィルタープロパティ群、PGP暗号化のためのドキュメント格納フィルタープロパティ群、等)についての記事は以後、公開されます)。


参考資料


<このシリーズの前の記事 | このシリーズの目次 | このシリーズの次の記事>