通过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
相关产品推荐
相关产品推荐

