.net - 如果用户不是管理员,则在 Azure 中运行 exe 时 RoleEnvironment.IsAvailable == false

标签 .net azure

我有一个部署到 Azure 的 Web 角色,作为启动过程的一部分,我安排一个 .exe 定期运行以执行一些后台工作(有点 like thisthis )。这非常有效,意味着我不需要单独的工作角色,这对于我的后台任务需要完成的工作来说相对来说是过度的。

我一直以本地管理员组中的用户身份运行计划任务,但希望稍微加强一下,但如果我将用户从本地管理员组中取出并运行 .exe,则 RoleEnvironment. IsAvailable 返回 false。这有什么好的理由吗?用户需要什么权限才能获取 RoleEnvironment.IsAvailable 的正确值?

Someone had a similar problem here以非管理员身份运行 Windows 服务时,但没有解决方案。

(也在 MSDN forum 上询问)

更新:我最近注意到 RoleEnvironment类文档说

The RoleEnvironment class can be used on standalone components in an Azure VM outside of an Azure role. [...] These processes must be run with elevated privileges to access the RoleEnvironment class.

这可能是我的计划任务需要使用管理员登录运行的原因。

最佳答案

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

但是我有一个建议给你。虽然单独的辅助角色可能有点大材小用,但在同一个 WebRole 中实现 RoleEntryPoint 怎么样?这是完全有效且受支持的场景。我见过很多客户这样做。只需在 WebRole 中创建一个继承自 RoleEntryPoint 的公共(public)类,重写您想要的方法(OnStart、OnStop、Run 甚至更少)即可完成。唯一需要注意的是,如果您想要配置文件,web.config 将无济于事。但是您必须添加 WaaIISHost.config 文件,您可以在其中放置与 RoleEntryPoint 中运行的代码相关的所有配置。

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

关于.net - 如果用户不是管理员,则在 Azure 中运行 exe 时 RoleEnvironment.IsAvailable == false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16980272/

相关文章:

c# - 为什么XmlSerializer可以序列化抽象类而不能序列化接口(interface)?

azure - azure 函数中出现 Microsoft.WindowsAzure.Storage.dll 版本不匹配错误

python - 使用 Python 读取 Azure ADLS Gen2 文件(不带 ADB)

php - 使用php在azure文件存储(不是BLOB存储)中上传的正确方法是什么

azure - Microsoft Azure - 多区域访问 blob 存储

c# - 插件架构模式

c# - 使用 Microsoft Teams 发送聊天消息

.net - 在双工绑定(bind) WCF 应用程序中处理丢弃的客户端

c# - 指南针/飞机仪表控制

Azure 网站仪表板停止记录请求