我将一个Web角色部署到Azure,并且作为启动过程的一部分,我安排.exe定期运行以执行一些后台工作(位like this或this)。这非常有效并且意味着我不需要单独的工作者角色,这对于我的后台任务需要做的事情来说相对过度。
我一直在以本地管理员组中的用户身份运行计划任务,但想稍微收紧一下,但是如果我将用户从本地管理员组中取出并运行.exe,那么RoleEnvironment.IsAvailable
返回false。这有什么好的理由吗?用户需要具有哪些权限才能获得RoleEnvironment.IsAvailable
的正确值?
Someone had a similar problem here以非管理员身份运行Windows服务但没有解决方案。
(也在MSDN forum上询问)
更新:我最近注意到RoleEnvironment类文档说
RoleEnvironment类可用于Azure角色之外的Azure VM中的独立组件。 [...]这些进程 必须以提升的权限运行 才能访问RoleEnvironment类。
这可能是我的计划任务需要使用和管理员登录运行的原因。
答案 0 :(得分:0)
我发现这确实令人沮丧。您确定它只是执行用户所在的安全组吗?你是通过RDP对机器进行测试,还是只是等待启动任务。因为如果您使用RDP并在那里执行某些操作,它将在连接用户的上下文中运行,并且在我使用RDP时,我从未在我的上下文中看到任何可用的RoleEnvironment变量。
但是我有一个建议。虽然单独的工作者角色可能是一种过度杀伤,但是如何在同一个WebRole中实现RoleEntryPoint呢?它是完全有效且受支持的方案。我看到有很多客户这样做。只需在WebRole中创建一个继承自RoleEntryPoint的公共类,覆盖您想要的方法(OnStart,OnStop,Run,甚至更少),您就完成了。唯一的小问题是,如果你想要一个配置文件,web.config将无济于事。但是您必须添加WaaIISHost.config文件,您可以在其中放置与RoleEntryPoint中运行的代码相关的所有配置。
现在,您将拥有所需的所有上下文,所需的所有配置,所需的所有功能,并将在同一Web角色中工作。通过更好的诊断,故障排除和调试选项,然后使用计划任务。