在Azure中,启动任务如何与包含它的角色进行通信?

时间:2011-04-07 22:54:29

标签: azure

我在Windows Azure工作角色中有一个启动任务。此启动任务对需要在VM中重新启动的注册表进行更改。所以我需要一种方法来指示它需要重新启动的角色。

到目前为止,我的解决方案是让Startup Task创建一个虚拟文件,如果它发现注册表已被修改(这意味着该角色已经重新启动)。因此,第一次运行角色时,它找不到虚拟文件,因此它会抛出一个未处理的异常,导致该角色重新启动。

下次启动任务再次启动并创建虚拟文件,这样我们就不会以无限循环结束。

这听起来像是一个非常黑客的解决方案。有更优雅的方式吗?我认为一种简单的方法是强制从启动任务重新启动,但无法找到如何执行此操作。

3 个答案:

答案 0 :(得分:4)

是的,这似乎是合理的。但是,如果要更改注册表,为什么不检查注册表以查看是否已更改它?只需将安装程序放在脚本中(例如yourinstaller.cmd),但在启动之前先调用另一个脚本进行检查(例如startup.cmd)。 'youinstaller.cmd'将始终重启。有意义吗?

@echo off
setlocal
set regpath=HKCU\Software\Microsoft\Windows\CurrentVersion\Foo\Bar
set regvalue=SomeKeyYouSet
set regdata=SomeValueYouSet
reg query "%regpath%" /v "%regvalue%" | find /i "%regdata%"
if errorlevel 1 (
    echo Data Not Found!
    call yourinstaller.cmd
    EXIT /B /0
)

答案 1 :(得分:3)

根据this blog post,它似乎与你想要的东西非常相似,但你并没有太远。它使用类似的临时文件技巧,但在批处理文件中完成所有操作,以及重新启动。要重新启动,请使用shutdown command

答案 2 :(得分:0)

我无法想象临时文件技术将如何工作。每次重新启动实例时,您都需要安装注册表值。您不能依赖于角色回收后持久存储的注册表值,并且您无法有条件地运行启动任务。

在更新注册表后,您能否详细说明为什么需要重启?实际上,如果确实有一个场景必须在引导之前设置这些注册表值,那么您应该查看VM角色。但好奇心正在杀死这只猫。