4

我有一个部署到 Azure 的 Web 角色,作为启动过程的一部分,我安排了一个 .exe 定期运行以执行一些后台工作(有点像 thisthis)。这非常有效,意味着我不需要单独的 Worker 角色,这对于我的后台任务需要做的事情来说是相对矫枉过正的。

我一直以本地管理员组中的用户身份运行计划任务,但想稍微加强一下,但如果我将用户从本地管理员组中取出并运行 .exe,则RoleEnvironment.IsAvailable返回 false。这有什么好的理由吗?用户需要什么权限才能获得正确的值RoleEnvironment.IsAvailable

有人在这里以非管理员身份运行 Windows 服务时遇到了类似的问题,但没有解决方案。

(也在MSDN 论坛上问过)

更新:我最近注意到RoleEnvironment类文档说

RoleEnvironment 类可用于 Azure 角色之外的 Azure VM 中的独立组件。[...] 这些进程必须以提升的权限运行才能访问 RoleEnvironment 类。

这可能是我的计划任务需要使用管理员登录来运行的原因。

4

1 回答 1

0

我觉得这确实令人沮丧。您确定这只是执行用户所在的安全组吗?您是通过 RDP 测试到机器中,还是只是等待启动任务。因为如果您 RDP 并在那里执行某些操作,它会在已连接用户的上下文中运行,而当我进行 RDP 时,我从未在我的上下文中看到任何可用的 RoleEnvironment 变量。

不过我有一个建议给你。虽然单独的工作角色可能有点过头了,但在同一个 WebRole 中实现 RoleEntryPoint 怎么样?这是完全有效且受支持的方案。我已经看到很多客户这样做了。只需在继承自 RoleEntryPoint 的 WebRole 中创建一个公共类,覆盖您想要的方法(OnStart、OnStop、Run 甚至更少),您就完成了。唯一需要注意的是,如果您需要配置文件,web.config 将无济于事。但是您必须添加 WaaIISHost.config 文件,您可以在其中放置与运行在 RoleEntryPoint 中的代码相关的所有配置。

现在,您将拥有所需的所有上下文、所需的所有配置、所需的所有功能,并且可以在同一个 Web 角色中工作。与计划任务相比,具有更好的诊断、故障排除和调试选项。

于 2013-06-07T09:29:32.060 回答