You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过NSSM设置为开机启动的按键记录器EXE无法写入日志文件

通过NSSM设置为开机启动的按键记录器EXE无法写入日志文件

我太懂这种糟心的情况了——手动运行EXE的时候按键记录、日志写入都好好的,用NSSM做成开机启动的服务后,明明服务状态显示“运行中”,但日志文件就是纹丝不动。结合你的代码和场景,这基本是服务运行权限或者环境差异导致的,给你几个针对性的解决办法:

1. 先解决最可能的权限问题

Windows服务默认用Local System账户运行,这个系统账户对非系统盘(比如你的F盘)的用户目录大概率没有写入权限,而你手动运行EXE用的是自己的登录账户,权限自然足够。解决办法二选一:

  • 给服务换用你的用户账户运行:打开NSSM的服务配置窗口,切换到「Log On」(登录)选项卡,选择「This account」,输入你平时登录Windows的用户名和密码,保存后重启服务。这样服务就会和你手动打开程序时用一样的权限,就能正常写入F盘的日志文件了。
  • 给系统账户添加目录写入权限:右键F:\Coding\PYTHON-PRACTICE\keylogger\dist文件夹 → 属性 → 安全 → 编辑 → 添加,输入NT AUTHORITY\SYSTEM,找到这个账户后勾选「写入」权限,应用保存后重启服务。

2. 检查代码的完整性和路径兼容性

看你贴的代码最后logKe...明显是截断了,这部分是处理特殊按键的逻辑,如果代码不完整,遇到回车、空格这类非字符按键时会抛出未处理的异常,导致整个日志写入逻辑中断。补全这部分代码试试:

except AttributeError:
    if key == keyboard.Key.space:
        logKey.write(' ')
    elif key == keyboard.Key.enter:
        logKey.write('\n')
    elif key == keyboard.Key.backspace:
        logKey.write('[BACKSPACE]')
    elif key == keyboard.Key.tab:
        logKey.write('[TAB]')
    # 其他需要记录的特殊按键可以继续补充

另外,也可以临时把日志路径改成系统公共目录测试,比如C:\Users\Public\keyfile.txt,这个目录所有账户都有读写权限,如果这里能正常写入,就坐实了原路径的权限问题。

3. 注意服务的桌面交互限制

按键记录器需要监听用户桌面的键盘输入,但Windows服务默认是隔离在会话0的,和用户桌面会话不互通。如果用Local System账户运行服务,你可以试试在服务属性里勾选「允许服务与桌面交互」(不过Windows 10及以后这个选项的限制很多,不如直接用自己的用户账户运行服务来得靠谱)。

对了,也理解这是你的网安课程项目,完全没问题,咱们就是解决技术上的小坑~

备注:内容来源于stack exchange,提问作者fazlehadii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 14:33:01