服务帐户和 BITS
可以使用 BITS 从服务传输文件。 该服务必须使用 LocalSystem、LocalService 或 NetworkService 系统帐户。 这些帐户始终登录;因此,使用这些帐户的服务提交的作业始终运行。
如果在系统帐户下运行的服务在调用 BITS 之前模拟用户,则 BITS 会响应任何用户帐户(例如,用户需要登录到计算机才能进行传输)。 在模拟用户时,服务还应将动态遮盖与 BITS 接口指针一起使用。 不继承封闭,因此必须在从 BITS 接收的每个接口指针上调用 CoSetProxyBlanket 函数(例如,从调用 IBackgroundCopyManager::CreateJob 方法返回的作业指针):它不足以在管理器接口指针上设置遮盖。 还可以为进程调用 CoInitializeSecurity 函数,而不是在每个接口指针上调用 CoSetProxyBlanket 函数。
但是,如果服务不模拟用户,则以下行为适用:
- 由服务帐户创建的作业由该帐户拥有。 由于系统帐户始终登录,因此只要计算机正在运行并且存在网络连接,BITS 即可传输文件。
- 系统帐户不应使用映射的网络驱动器号,因为驱动器号特定于会话,并且映射可能会在计算机重启后丢失。
- 如果没有 帮助程序令牌,网络身份验证将使用本地系统和 NetworkService 帐户的计算机凭据以及 LocalService 帐户的匿名凭据。 如果源文件的访问控制列表(ACL)限制对用户帐户的访问,则 BITS 将返回“拒绝访问”。
- 有关身份验证在存在 帮助程序令牌时的工作原理的详细信息,请参阅 身份验证。
- Microsoft Internet Explorer 代理设置是按用户存储的,并且未为系统帐户设置。 请考虑在 BITS 作业上配置帮助程序令牌,或通过使用 BG_JOB_PROXY_USAGE_OVERRIDE调用 IBackgroundCopyJob::SetProxySettings 显式设置正确的代理设置。 或者,可以使用 BitsAdmin.exe 的 /Util /SetIEProxy 开关为 LocalSystem、LocalService 或 NetworkService 系统帐户设置 Internet Explorer 代理设置。 有关详细信息,请参阅 BitsAdmin 工具。
请注意,BITS 无法识别使用 Proxycfg.exe 文件设置的代理设置。