2017-10-24 1 views
1

win32 API QueryServiceConfig2機能は、サービスの起動をトリガするイベントを取得するためにSERVICE_CONFIG_TRIGGER_INFO構造体をサポートします。しかし、pythonのwin32service.QueryServiceConfig2()は、そのような値をパラメータオプションとしてリストしていません。 win32serviceモジュールでその情報を取得することは可能ですか?python win32service - サービス起動時の起動情報の取得

答えて

0

残念ながら、ここでは、単純なコードスニペットはPython35の下で走っだとpywin32-221:

import win32service 

if __name__ == "__main__": 
    for name in dir(win32service): 
     if name.startswith("SERVICE_CONFIG_"): 
      print(name, getattr(win32service, name)) 

出力

(py35x64_test) c:\Work\Dev\StackOverflow\q46916726>"c:\Work\Dev\VEnvs\py35x64_test\Scripts\python.exe" a.py 
SERVICE_CONFIG_DELAYED_AUTO_START_INFO 3 
SERVICE_CONFIG_DESCRIPTION 1 
SERVICE_CONFIG_FAILURE_ACTIONS 2 
SERVICE_CONFIG_FAILURE_ACTIONS_FLAG 4 
SERVICE_CONFIG_PRESHUTDOWN_INFO 7 
SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO 6 
SERVICE_CONFIG_SERVICE_SID_INFO 5 

私はまた別である(win32conをチェックしましたpywin32モジュール、それは定数定義のみを含む)が、luc kのいずれかである。

はその後、私は "$ {} PYWIN32_SRC_DIR /pywin32-221/win32/src/win32service.i" で見ていた、とChangeServiceConfig2(ともQueryServiceConfig2)のために、InfoLevel引数は、具体的に照らしてチェックされていることに気づきました上記の定数を使用して、その値()を直接渡すと、例外(NotImplementedError)が発生します。 ( - もしあればPythonのスタイル)Cに変換され

  1. 引数:

    先に進む前に、このようなPythonのラッパーを(のようなwin32service.QueryServiceConfig2)を呼び出すときに何が起こるかを理解する少しを費やしてみましょうスタイル

  2. C関数は、引数
  3. 関数の結果(又はOUTPは、上記で変換と呼ばれていますもしあれば - が - UT引数)パイソンバックから[MSDN]: ChangeServiceConfig2 functionについて

に変換され、データは(dwInfoLevel値に応じて、lpInfoは、様々な意味を有することができる)引数を介して前後に転送されます。

へのポインタ[MSDN]: SERVICE_TRIGGER structure

  • pDataItems体へのポインタである(と関連するすべての構造が他のメンバーを持っていることに注意してください私は入れ子のレベルを上げるものだけを挙げました)。すべてのこれらの引数のサポートを追加する

は正確に簡単な作業ではありませんので、彼らは(少なくとも現時点では)未処理です。

と組み合わせて、多くの人が機能を要求していないので、このような例がもっとあります。MS(そのような複雑な動作を持つ機能を持つ意思決定)代替(かなり複雑なもの)、あなたは[Python]: ctypes — A foreign function library for Pythonを使用することができますが、あなたは、私はPythonのに上記のすべての構造を定義する必要がありますよう

ctypes.Structureを拡張します)。サイドノートとして
  • は、私がかつて正確な状況にあった:私は[MSDN]: LsaLogonUser function!!! 14個のおかしく引数!!!)を呼び出す必要がありました。もちろん、それはpywin32によってエクスポートされていなかったので、私はctypesの経由で呼ばれるが、私は書かなければならなかった:コードの
    • 〜170行の構造(私は私のシナリオに必要なものだけを定義します)
    • 〜50行をそれらを移入し、
関数を呼び出します
関連する問題