我了解启动任务用于设置您的系统。例如,如果您的代码是用 Python 编写的,您可以添加启动任务来安装 Python。但是这也不能在 ProgramEntryPoint 批处理脚本中完成吗?有什么不同?
3 回答
确实,如果您使用 ProgramEntryPoint,似乎没有理由使用启动任务。您确实可以在同一个批处理文件中包含所有逻辑。
使用 .NET WebRoles/WorkerRoles 时,启动任务会变得更加有用。在那里,您只能选择编写代码(您可以再次调用单个批处理文件调用其他批处理文件)和/或使用启动任务。
但是,如果您从维护的角度来看它,那么将启动任务用于与配置和安装实例有关的所有事情都会更加简洁。您在配置/安装和您的实际应用程序之间划清界限——您实际上可以将其视为关注点分离(这对于项目中的其他/新开发人员来说很容易理解)。
除此之外,您必须知道,当您使用任务时,您可以在不同的上下文(受限/提升)中执行任务,这从安全角度来看可能很重要。任务以不同的类型(简单、后台、前台)存在,可以在许多不同的场景中使用(例如,不断 ping 您的站点的后台应用程序)。如果您不使用任务,则可能需要自己处理所有这些。
这是一篇很好的博客文章,涵盖了启动任务的详细信息:Using Startup Task in Windows Azure 详细总结
您可能无法从 ProgramEntryPoint 安装 Python,因为安装可能需要提升(“管理员”)权限。
角色(网络/工作人员)通常没有提升的特权(这可能是可能的,但出于明显的安全原因,这是一种不好的做法)。因此 ProgramEntryPoint 中的代码没有提升的特权。
另一方面,启动任务可以具有提升的特权。IMO,这可能是使用启动任务的最大(单一?)好处。
桑德里诺的回答很好。简而言之 - 如果您希望在您的角色开始之前执行(或开始执行)一些代码,您将使用启动任务。如果这不是约束,您始终可以从 Role 的 OnStart 方法执行任何进程(包括批处理脚本)。我过去使用启动任务的一种情况是安装 NewRelic 监控代理。我希望在实际应用程序启动之前运行它来分析我的应用程序。