在 Windows Vista 中(我认为 Windows 7 也是如此),Microsoft 改进了通过任务计划程序运行的进程的安全性,即http://technet.microsoft.com/en-us/appcompat/aa906020.aspx:
在 Windows Vista 任务计划程序中,安全性得到了极大改善。任务计划程序支持安全隔离模型,在该模型中,在特定安全上下文中运行的每组任务都在单独的会话中启动。为不同用户执行的任务在单独的窗口会话中启动,彼此完全隔离,并且与在机器(系统)上下文中运行的任务完全隔离。
问题是我有一个脚本需要按设定的时间间隔运行并通过 SCP 将文件上传到 Linux 网络服务器,为此我使用盛会存储脚本随后可以获取的 SSH 密钥。所有这些在 Windows XP 中都可以正常工作,但由于 Windows Vista 中的隔离模式,脚本似乎无法与 Pageant 进程通信,因此 SCP 传输失败。
任务计划程序配置实用程序中有一个选项,你可以选择“针对 Windows Server 2003、Windows XP 或 Windows 2000 配置”,这至少使得任务以交互方式运行,这也是我想要的,但隔离模式似乎仍然启用。
问题:有没有办法关闭 Windows Vista 任务计划程序中的新“隔离模式”,以使其行为与 Windows XP 一样,允许进程间通信?
更新:我不知道这是否应该受到“会话 0 隔离”,但在该页面的文档中提到了以下内容:
服务尝试使用窗口消息函数(例如 SendMessage 和 PostMessage)与应用程序通信。这不起作用,因为应用程序在不同的会话中运行,因此具有不同的消息队列。消息永远不会到达目的地。对于尝试通过窗口消息与服务通信的应用程序也是如此。
哪个 Pageant 会这样做...但是启用“为 Windows XP 配置”时也应该如此吗?
答案1
这个问题的出现是因为 Vista/Win7 中存在我所描述的隔离模式。Pageant 与客户端应用程序通信时的工作方式是发送和接收简单的窗口消息。当进程被隔离时,这种方法不起作用,因为程序在具有不同消息循环的不同会话中运行。
我最终通过重写 Pageant 和 Putty 套件中的客户端应用程序来使用命名管道来解决这个问题。我已经向 putty 开发人员提交了一个补丁,但截至撰写本文时,它尚未合并到主干中。感谢开源!:)
答案2
因为您说过它在手动运行时可以正常工作,所以请检查您从哪里运行脚本,即“开始于(可选)”文件夹。
我不知道这是否相关,但如果没有指定(尝试从 C:\Windows\system32 运行脚本,我相信它受到高度保护),我们的脚本就永远无法正常运行,即使拥有所有的管理员权限。
看看是否有任何区别。