我有一台机器将部署在客户的位置。该机器将没有头,只能通过 RDC 访问。(除非发生灾难。)有一段软件必须始终运行,以记录来自连接传感器的数据。该软件仅在“前台”运行时才有效。也就是说,如果我使用“无论用户是否登录都运行”将其作为任务启动,我可以在任务管理器中看到,但没有记录任何数据。如果我将其关闭并通过任务计划程序运行任务,它仍然不会记录数据。如果我将其关闭并通过其固定的任务栏图标启动它,它就可以正常工作。
如何让此软件在启动时运行**?我希望当我使用用户名和密码登录 RDC 时,能够看到该应用程序。但是,如果有人插入键盘和鼠标,计算机将无法解锁。
** 我已将机器的 BIOS 设置为断电后自动启动。
答案1
使用 psexec 从计划任务运行。任务计划程序中有一个“系统启动时”选项。将其配置为运行:
psexec -u USERNAME -p PASSWORD -i 0 -d c:\path\to\program.exe
-i 0 告诉它在会话 0 中运行,从 2008 年开始是控制台会话。
答案2
我最终用出色的方法解决了这个问题(尽管文档有点混乱)nssm
-非吸吮服务经理
我不是 Windows 管理员,所以我倾向于让一切都对 Unix 友好。希望这能有所帮助,而不是造成混淆。以下是我解决这个问题的方法(并为我未来的自己记录下来)。
- 安装
choco
因为它离你最近的地方apt
或者brew
对于 Windows。 安装
cygwin
因为我们将要使用 BASH。choco install --yes cygwin
安装
nssm
choco install --yes nssm
将以下内容保存到我将调用的脚本中
create_service.sh
name='Phone Home' command='C:\Program Files\Python35\python.exe' arguments='phone_home.py -p 3389' start_in='C:\Users\ET\Dropbox\src\' # Edit this shared code have it sync'd via Dropbox FTW! domain='.' username='ET' password='Use SSH and reverse port forwarding!' description='Launch Phone Home script at startup for real, not at log on. (Because this machine is headless, and how are you supposed to log in before it phones home?)' display_name="00 $name" # make it sort to the top in Services nssm stop "$name" nssm remove "$name" confirm nssm install "$name" "$command" $arguments nssm set "$name" AppDirectory "$start_in" nssm set "$name" DisplayName "$display_name" nssm set "$name" ObjectName "$domain\\$username" "$password" nssm set "$name" Description "$description" nssm start "$name"
nssm
只需调用脚本即可通过 API“安装”Windows 服务。source create_service.sh
笔记:
nssm stop
和命令nssm remove
第一次将会失败,但我把它们放在那里,以便您可以重新运行脚本来更改您的服务。
这一切都暗示着存在一个非常复杂的远程代码执行和 Microsoft 远程桌面 ssh 代理系统。这又是另一个教训了。