【发布时间】:2013-06-07 09:06:24
【问题描述】:
我有一个 Web 角色部署到 Azure,作为启动过程的一部分,我安排了一个 .exe 定期运行以执行一些后台工作(有点 like this 或 this)。这非常有效,意味着我不需要单独的 Worker 角色,这对于我的后台任务需要做的事情来说是相对矫枉过正的。
我一直以本地管理员组中的用户身份运行计划任务,但想稍微加强一下,但如果我将用户从本地管理员组中取出并运行 .exe,那么RoleEnvironment.IsAvailable 返回 false .这有什么好的理由吗?用户需要什么权限才能获得RoleEnvironment.IsAvailable 的正确值?
Someone had a similar problem here 以非管理员身份运行 Windows 服务时,但没有解决方案。
(也在MSDN forum上询问)
更新:我最近注意到RoleEnvironment 类文档说
RoleEnvironment 类可用于 Azure 角色之外的 Azure VM 中的独立组件。 [...]这些进程必须以提升的权限运行才能访问 RoleEnvironment 类。
这可能是我的计划任务需要使用管理员登录来运行的原因。
【问题讨论】:
-
这可能是 Azure 中的一些错误。绝对值得尝试使用其他一些本地组 - 也许你会找到一个“足够紧”并且仍然有效的。
-
你的 EXE 是 .NET 控制台应用程序,对吧?
-
是的,它是一个 .net 控制台应用程序。
-
您是否使用 Process 类从 webrole 的开头(在 codeE 中)启动外部 EXE?您可以使用 processStartInfo.EnvironmentVariables.Add 将 Role.Environment 中的所有设置传递给子进程,并在这些子进程中从 Environment.GetEnvironmentVariables 中读取。
-
不,我在 Web 角色启动期间使用 .bat 文件来创建 Windows 计划任务以定期运行 exe。现在,我将保留该模型,并在我准备好进行更改时切换到用于计划任务的较新 Azure 功能之一。不过感谢您的建议。