我正在尝试寻找一种轻量级的方法从 Linux 启动远程 Windows7 机器上的应用程序。
以下是我的边界条件:
- Windows7系统与Linux机器位于同一个局域网的同一个子网。
- 如果需要,该计算机上有一个具有管理员权限的本地用户帐户,并且知道密码。
- 在 Windows 机器上启动的应用程序需要显示一个窗口。它不仅仅是一个进程。
- 在 Windows7 系统上无需进一步交互。
- 我不想在该系统上安装功能齐全的 cygwin。
- 我尝试使用 psExec(winexe)的 Linux 等效版本,但我仍然需要确认 windows7 机器上的一些警告。
从另一台 Windows7 机器使用 psExec 可以工作,但我必须从 Linux 主机在 Windows 机器上启动一个进程。
编辑:
我可以自由安装附加软件,但我不想安装 mysys 或 cygwin。
应用程序需要立即启动(即 Linux 计算机触发“启动应用程序”后立即启动)。在我看来,轮询不是一种选择。
我发现,windows7 在应该从 winexe 调用命令时显示的警告是一个名为“会话 0 隔离”但还没有找到关闭它的方法。
答案1
放射科医师协会会完全满足您的要求。它可以在当前登录用户的上下文中运行,并在端口上侦听来自预授权主机的传入连接。您可以发送命令(例如 calc.exe)并让应用程序出现在用户的桌面上。
请注意,有很多实现,我不想推荐其中一种,有些作为服务运行,但您可能需要找到一个在登录用户上下文中运行的实现来执行您的要求。
根据评论进行编辑:
我用过这个过去完全按照您的要求执行。它是轻量级的,只是一个独立的二进制文件。
首先,在 Windows PC 上创建一个 rhosts 文件并将其另存为c:\windowsrhosts
(请注意,这不是拼写错误,此文件存在于 C: 驱动器的根目录中)。该文件应包含您要连接的远程 Linux 计算机的 FQDN,后跟用户名,例如
remotepc.example.com bryan
接下来,使用以下命令创建登录时执行的批处理文件
rshd.exe -d
这将留下一个命令提示符窗口,您可以将其最小化。
在 Linux PC 上下载 RSH 客户端(我只测试过使用Windows RSH 客户端)
我刚刚测试过,并使用以下命令启动了 calc
rsh windowspc.example.com -l bryan calc
...然后在 Windows 桌面上弹出 calc.exe。
答案2
我知道这个帖子已经有 3 年了,但这是我找到的一个解决方案。
由于某种原因,winexe 的“--interactive=1”与 psexec 的“-i”选项不同。使用 winexe,用户仍必须接受“交互式服务检测”对话框。
一个可能的解决方案是:
1 - 使用 smbclient 或 CIFS 共享将 psexec 上传到 Windows 机器。2 - (可选)上传您想要运行的 GUI 程序。3 - 通过 winexe 通过 psexec 运行 GUI 程序。像这样:
winexe --uninstall --interactive=0 -U 'WinAdmin%WinAdminPasswd' //1.2.3.4 '\windows\temp\psexec.exe -i \\127.0.0.1 -u WinAdmin -p WinAdminPasswd notepad.exe
并且记事本将成功出现在登录用户的桌面上。
如果仍然出现‘交互式服务检测’对话框,则必须先禁用该服务,然后重新启用:
winexe --interactive=0 -U 'WinAdmin%WinAdminPasswd' //1.2.3.4 'cmd /c sc config UI0detect start= disabled > NUL & sc stop UI0detect > NUL'
// (do your stuff)
winexe --interactive=0 -U 'WinAdmin%WinAdminPasswd' //1.2.3.4 'cmd /c sc config UI0detect start= manual > NUL & sc start UI0detect > NUL'
答案3
您说您不想安装 cygwin,但您愿意在 Windows 计算机上安装其他任何东西吗?您可以在 Windows 计算机上安装 SSH 服务器,或者安装 telnet 服务器功能(不太安全,除非计算机有安全防火墙,否则不建议这样做)。
另一个选项可能更像是临时解决方案。然后将一个空白的批处理文件发布到某个地方,比如 Linux 计算机上的 Samba 共享,并具有读/写访问权限。然后在 Windows 7 计算机上创建一个任务,每 5 分钟执行一次另一个批处理文件。在上述脚本中,第一行将空白脚本下载到 Windows 7 计算机,第二行将该批处理文件作为调用另一个脚本的脚本。通常,此文件是空白的,因此当任务运行时,它会下载一个空白脚本,然后调用该脚本(不执行任何操作),然后退出。当您想要“运行命令”时,只需更改脚本,使该命令作为第一行,第二行覆盖共享上的(通常为空白的)脚本,用空白文件覆盖它(以防止您的命令被第二次执行)。
我只需安装一个 SSH 服务器并通过 SSH 连接,但我认为这可能是一种“开箱即用”的方法,无需在 Windows PC 上安装任何软件……
答案4
那么 Linux 上的 RDP 或 VNC 客户端怎么样?例如 Remmina(你可以定义屏幕分辨率、颜色深度,甚至 Windows 凭据)或 krdc 对于 RDP,你不需要安装任何东西——只需启用远程桌面即可