V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
linuxzpf
V2EX  ›  Python

python 与 py2exe 写的服务进程在 win8 上怎么杀掉?

  •  
  •   linuxzpf · 2015-02-15 11:33:39 +08:00 · 2856 次点击
    这是一个创建于 3349 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用py2exe打包的一个windows服务进程,在win8上用taskkill杀,只有打开管理员权限的cmd才能杀掉,问题是软件更新时我要用脚本或者程序自动杀掉它,所以怎么在脚本中获取使用win8的管理员权限杀掉进程呢? 图形界面和右键点击神马的就不说了。

    5 条回复    2015-02-15 22:35:35 +08:00
    geeklian
        1
    geeklian  
       2015-02-15 12:21:55 +08:00 via iPhone
    如果脚本就能骗过UAC,那微软还是倒闭算了。
    geeklian
        2
    geeklian  
       2015-02-15 12:53:22 +08:00
    吐槽完,还是说说经验,我也是在win下用python+powershell运维的。
    我的观点:关闭uac不是啥好主意。

    1. 为了今后升级平滑,要改写你的服务,加入自己停止的功能。

    2. 这次升级用py2exe打包你的补丁,给输出的exe文件新建一个manifest文件。模仿.net程序,加入:requestedExecutionLevel="requireAdministrator" ,具体用这段字符串google....

    3.如果程序很简单,可以不用py2exe打包,pywin32写出的服务,直接python.exe code.py也是ok的,参考django代码,可以做到替换py文件,程序自动reload。

    reload也参考下http://www.indelible.org/ink/python-reloading/
    lujjjh
        3
    lujjjh  
       2015-02-15 17:49:57 +08:00
    用 taskkill 杀服务并不优雅,Windows 本身提供了一系列操作服务的接口,这种轮子别人一定也是造过了的。

    随便搜了下:
    http://pyxr.sourceforge.net/PyXR/c/python24/lib/site-packages/win32/lib/win32serviceutil.py.html
    操作服务也是需要提升权限的,但是比 taskkill 好很多。

    除此之外,Windows 还提供了许多进程间通信的方法:
    https://msdn.microsoft.com/en-us/library/windows/desktop/aa365574(v=vs.85).aspx
    通过进程间通信,甚至可以实现很多除启动、停止服务之外的事情。

    当然,以管理员身份执行命令的接口 Windows 自然也是有的:
    http://stackoverflow.com/questions/19672352/how-to-run-python-script-with-elevated-privilage-on-windows

    总之,尽可能让服务进程自己结束(Windows 的服务管理接口也算),尽可能少用 taskkill 这种不优雅的方式。
    linuxzpf
        4
    linuxzpf  
    OP
       2015-02-15 22:34:10 +08:00
    @geeklian 写服务的时候就已经加入停止的信号了,但是在有的windows上服务还是不能正常停止,所以才想到杀进程是最直接了当的方式。你说的这个方法我还没试过,听起来很高大上嘛
    linuxzpf
        5
    linuxzpf  
    OP
       2015-02-15 22:35:35 +08:00
    @lujjjh 看了下你提供的几个方法,都很高大上嘛,我自己真是搞不来
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5931 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 02:23 · PVG 10:23 · LAX 19:23 · JFK 22:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.