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