2012年6月30日土曜日

LibreOfficeとunoconvを、IIS6で動かした!

この問題の対処法が判りました:
Failed to connect to C:\Program Files\LibreOffice 3.5\program\soffice.exe (pid=10080) in 6 seconds.
Connector : couldn't connect to socket (WSAECONNREFUSED, Connection refused)
Error: Unable to connect or start own listener. Aborting. 
対策:(2012/07/05に大幅修正!)

① IUSRを止めて、一般的なアカウントに変更する。
Users権限を持っていれば十分です。Administrators権限は不要です。


参考:https://github.com/dagwieers/unoconv/issues/44

② AppDataのパスを固定化する。

それでもダメなら、AppDataのパスを固定化します。

その一般的なアカウントでログインし、レジストリエディタを立ち上げます。例:
runas /u:Pro4 /p regedit.exe
レジストリの次の場所のAppData値
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
こちらの指している場所を、具体的なパスに変更する。例:
C:\Documents and Settings\Pro4\Application Data
こんな感じです:

最初は次のようになっています:
%USERPROFILE%\Application Data

原因:(2012/07/05に修正)

長々と追跡しましたが、次の箇所で、失敗していたようです。
if ( !GetSpecialFolder( &ustrFile, CSIDL_APPDATA) )
普通はここで失敗しない手はずですが…

IUSR_XXXのアカウントを確認しますと、Guests権限になっていました。

また、IIS7.5では、IUSRは、NT AUTHORITY\IUSRに収まっていたりと、低権限故のアクセス制限が多数掛けられている可能性が見込まれます。

それで、CSIDL_APPDATAは、bootstrap.ini中の、$SYSUSERCONFIGを解決する際に必要とされます。
UserInstallation=$SYSUSERCONFIG/LibreOffice/3
utl::Bootstrap::locateUserInstallationが、それを取得しようとしますが、GetSpecialFolderで失敗します。
return UserInstall::E_Creation;
UserInstall::UserInstallError instErr_fin = UserInstall::finalize();まで戻りまして、次の様な具合で落ちます:
HandleBootstrapErrors( BE_USERINSTALL_FAILED );
「プログラムは起動できません。」「内部エラーが発生しました。」を表示する事になる様です:
FatalError(aMessage);

2012年6月29日金曜日

LibreOfficeとunoconvを、IIS6で動かしたい

Word/Excel/PowerPoint等の文書データを、PDFに変換しようと試みています。

unoconvを、IIS6+PHP5.4上で動かして、少ない手数で実現したい…

然しながら、うまくいっていません。

unoconvが期待するように動いてくれません:
  • デスクトップ環境では、期待する様に動きます。
  • しかし、IIS6環境では、失敗しています。
Webブラウザでは、次のようなメッセージを受け取っています:
Failed to connect to C:\Program Files\LibreOffice 3.5\program\soffice.exe (pid=10080) in 6 seconds.
Connector : couldn't connect to socket (WSAECONNREFUSED, Connection refused)
Error: Unable to connect or start own listener. Aborting.
unoconvの問題ではなく、LibreOfficeの方がトラブルに巻き込まれている感じです。

解決を図るために、いつもの如く、Google先生に頼み込みます:
同じ境遇の方もいらっしゃるようですが、未だ解決策は見つかっていません。

という訳で、自力調査が始まります。

~~~

途中は省きますが、

LibreOfficeがMessageBoxを表示して、入力を待っていることが分かりました。

デスクトップにはMessageBoxは表示されませんが、裏方で表示されている様です。

次の図は、WinDbgでsoffice.binをアタッチした時の様子です。スタックトレースを追跡し、MessageBoxの引数をメモリダンプで確認しています:

ちょうど、次のようなメッセージボックスを表示して停止しているのでしょう。再現してみました:

次の方策は、自炊のデバッグ版LibreOfficeで以て、エラー箇所を特定することです。ご期待ください!

2012年6月5日火曜日

私製INetCfg

INetCfgを使用して得られる、バインド情報を可視化してくれるプログラムを書いています。


この図を見ていますと、INetCfgの構造が把握し易くなります。

背景としましては:
  • ウィルス対策ソフトに不備が有る! 事が有ります。
  • その不備によって、Windowsが起動する際に、ネットワークアダプタを全部隠してしまう場合が有ります。
  • 仮説としましては、バインド情報を破壊しているのではないか、という事。
  • その際に、現状のバインド情報を可視化し、情報収集に役立てよう、という算段です。