【问题标题】:RoleEnvironment.IsAvailable == false when running exe within Azure if user is not an Administrator如果用户不是管理员,则在 Azure 中运行 exe 时 RoleEnvironment.IsAvailable == false
【发布时间】: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 功能之一。不过感谢您的建议。

标签: .net azure


【解决方案1】:

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

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

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

【讨论】:

  • 我很确定它与安全组有关。我已经 RDP 编辑并更改了计划任务然后等待,并且还通过更改 startup.cmd 以将用户添加到管理员然后重新部署进行测试。
  • 当我 RDP 到机器并自己运行 .exe(以管理员身份登录)时,我确实得到了 RoleEnvironment.IsAvailable 的正确值,并且它能够使用 azure 访问 cscfg 设置就好了.我从来没有遇到过这个问题。
  • RE RoleEntryPoint 我会看看这个想法,虽然这将是一个比我现在想要的更重要的变化,因为除了这个问题之外,计划任务运行良好。
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 2018-12-25
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
相关资源
最近更新 更多