小编chi*_*ete的帖子

用python编写的Windows服务,不检测关闭事件并正常停止

我使用With Extended Service Notifications示例代码在python中为Windows XP +编写了一项服务.它非常适合检测用户登录/注销锁定屏幕和其他事件.问题是它永远不会执行关闭事件,并在重启/关闭时正常停止服务.它通过登录/注销事件保持活动状态,并在重新启动后再次启动.任何帮助,将不胜感激.

我不想使用RegisterServiceCtrlHandlerEx并处理控制台信号,如果我能帮助它 - 服务内置了这个功能,我只是以某种方式破坏了它.

这是代码:

from os.path import splitext, abspath
from sys import modules

import win32serviceutil
import win32service
import win32event
import win32api
import win32security
import win32ts

class Service(win32serviceutil.ServiceFramework):
  _svc_name_ = '_unNamed'
  _svc_display_name_ = '_Service Template'

  def __init__(self, *args):
    win32serviceutil.ServiceFramework.__init__(self, *args)
    self.log('Initializing Service')
    self.stop_event = win32event.CreateEvent(None, 0, 0, None)
    self.server = None

  def log(self, msg):
    import servicemanager
    servicemanager.LogInfoMsg(str(msg))
  def logErr(self, msg):
    import servicemanager
    servicemanager.LogErrorMsg(str(msg))
  def logWarn(self, msg):
    import servicemanager
    servicemanager.LogWarningMsg(str(msg))

  def sleep(self, sec):
    win32api.Sleep(sec*1000, …
Run Code Online (Sandbox Code Playgroud)

python service winapi pywin32

20
推荐指数
1
解决办法
2402
查看次数

在Python脚本中使用.Net(C#)dll

我正在尝试将一个简单的C#命令行实用程序移植到Python.C#程序使用一个名为foobar.dll的自定义.Net dll,它通过I2C与一些实验室设备连接.C#代码中dll的用法如下:

fooBar.fooProvider provider = new foobar.fooProvider()
fooBar.fooBarLib fooLib = new foobar.fooBarLib(provider, 0x80)
# used below ...
numFloat = fooLib.GetSomething()
# more python ...
fooLib.SetSomething(NumberAsAFloat)
Run Code Online (Sandbox Code Playgroud)

我想过简单地使用ctypes访问dll,但我认为这对C#/ .Net不起作用.由于我们实验室的限制,我需要使用一个vanilla Python发行版+插件模块(即不是IronPython或CPython.)我看了Python for .NET,但我不确定这实际上是否有用.我是.Net的n00b,但在Java,C++和Python方面有很多经验.以前有人遇到过这种情况和一个好的解决方案

编辑:

通过下面的解释,我在python解释器中导入了clr,然后尝试导入fooBar库,结果如下:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'Interop.AVMCIFCLib, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
File name: 'Interop.AVMCIFCLib, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null'
   at System.Signature._GetSignature(SignatureStruct& signature, Void* pCorSig, Int32 cCorSig, IntPtr fieldHandle, IntPtr methodHandle, IntPtr declaringTypeHandle)
   at System.Signature.GetSignature(SignatureStruct& signature, Void* …
Run Code Online (Sandbox Code Playgroud)

.net c# python dll python.net

5
推荐指数
1
解决办法
6790
查看次数

标签 统计

python ×2

.net ×1

c# ×1

dll ×1

python.net ×1

pywin32 ×1

service ×1

winapi ×1