2014年9月26日金曜日

unoconvが失敗「ERROR: DLL load failed: 指定されたプロシージャが見つかりません。」

unoconvを使って変換しようとすると、次のようなエラーに遭遇致しました。

unoconv: Cannot find a suitable pyuno library and python binary combination in C:\Program Files (x86)\OpenOffice 4

ERROR: DLL load failed: 指定されたプロシージャが見つかりません。



unoconv: Cannot find a suitable pyuno library and python binary combination in C:\Program Files (x86)\OpenOffice 4

ERROR: DLL load failed: 指定されたプロシージャが見つかりません。



unoconv: Cannot find a suitable office installation on your system.

ERROR: Please locate your office installation and send your feedback to:

       http://github.com/dagwieers/unoconv/issues

利用しているOpenOfficeは「Apache_OpenOffice_4.1.1_Win_x86_install_ja.exe」です。

unoconvで当該エラーが出ている箇所では、「import uno, unohelper」をやっています。

そこで、自分でpythonを起動して、それをやってみました。

Python 2.7 (r27:82525, Jul  4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import uno
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "uno.py", line 36, in <module>
    import socket # since on Windows sal3.dll no longer calls WSAStartup
  File "C:\Program Files (x86)\OpenOffice 4\program\python-core-2.7.6\lib\socket
.py", line 47, in <module>
    import _socket
ImportError: DLL load failed: 指定されたプロシージャが見つかりません。
>>>

「import _socket」が失敗しています。

Dependency Walkerで、DLLファイル"C:\Program Files (x86)\OpenOffice 4\program\python-core-2.7.6\lib\_socket.pyd"
をチェック致しましたところ、エクスポート関数が無い!
通常、init_xxxなどが輸出されていると思われるのですが、それが無いのです。

私のPython2.7に付いてくるファイル「C:\Python27\DLLs\_socket.pyd」では、「init_socket」と「init_sockobject」が輸出されていました。

つまり、OpenOffice 4.1.1に付いてくるPythonは部分的に壊れている可能性が高いです。

私の手持ちの_socket.pydで置き換えました所、エラーはでなくなりました。

一応、本家にも報告致しました。

2014年9月11日木曜日

HTTP.sysがTCP port 80を押さえてしまう

何者かがHTTP.sysを使役し、TCP port 80を押さえる事によって、ApacheがTCP port 80を使用できなくなりました。Windows Server 2008 R2 Foundation

イベントビューアの「アプリケーション」ログ:
---
The Apache service named  reported the following error:
>>> (OS 10013)アクセス許可で禁じられた方法でソケットにアクセスしようとしました。  : make_sock: could not bind to address 0.0.0.0:80    
---

まず、次のコマンドで滅しました。
---
netsh http delete urlacl url=http://+:80/Temporary_Listen_Addresses/
netsh http delete urlacl url=http://+:80/MSDEPLOYAGENTSERVICE/
---

更に、サービス「MsDepSvc」Web Deployment Agent Serviceについて、停止。自動→無効。

これで何とかApacheがTCP port 80を使用できるようになりました。

一覧化には、 netsh http show urlacl を用います。

C:\Users\ku_000>netsh http show urlacl

URL 予約:
-----------------

    予約済み URL            : http://+:80/Temporary_Listen_Addresses/
        ユーザー: \Everyone
            リッスン: Yes
            委任: No
            SDDL: D:(A;;GX;;;WD)

予約ではなく、実際に使っている場合は、netsh http show servicestate で確認するようです。

IIS が TCP ポート 80 番を使ってしまうという情報も有ります。