c# - 更改应用程序池的标识时出错

标签 c# windows iis azure

我尝试更改 Windows Azure 上应用程序池的标识。我的项目在 Windows Azure 上工作时使用此应用程序池。默认情况下,应用程序池使用 NetworkService 身份,但我必须使用另一个身份。我尝试通过以下方式在 WebRole 的 OnStart() 事件中更改它:

using (ServerManager serverManager = new ServerManager())
{                       
    string appPoolName =
    serverManager.Sites[RoleEnvironment.CurrentRoleInstance.Id + "_Web"]
    .Applications.First().ApplicationPoolName;

    var appPool = serverManager.ApplicationPools[appPoolName];

    appPool.ProcessModel.UserName = Environment.MachineName + "\\UserName";

    appPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;

    appPool.ProcessModel.Password = "UserPassword";

    serverManager.CommitChanges();
}

但我收到下一条消息的异常:

    System.Runtime.InteropServices.COMException (0x80090016): 
       Keyset does not exist (Exception from HRESULT: 0x80090016)
   at Microsoft.Web.Administration.Interop.AppHostWritableAdminManager.CommitChanges()
   at Microsoft.Web.Administration.Configuration.CommitChanges()
   at Microsoft.Web.Administration.ConfigurationManager.CommitChanges()
   at Microsoft.Web.Administration.ServerManager.CommitChanges()
   at Project.Web.WebRole.OnStart() in E:\Projects\...\Web\WebRole.cs:line 57

如果我在 IIS 管理器中更改身份,我不会收到任何错误。我的代码有什么问题以及为什么会收到此错误?

最佳答案

更新 applicationHost.config 需要管理权限。当您在本地运行时,您是管理员。在云中,除非您提升角色,否则您的 RoleEntryPoint 将作为普通用户运行。你这样做了吗?

检查您是否有 <Runtime executionContext="elevated"/>在 ServiceDefinition.csdef 的角色声明中指定。

编辑:韦德还展示了如何使用稍微不同的方法来做到这一点(查看评论)。 Try this as well

关于c# - 更改应用程序池的标识时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7330903/

相关文章:

jquery - 如何说服浏览器从缓存中加载图像而不是从服务器获取

c# - 如何防止未经身份验证的用户下载文件

c# - RadAjaxManager 不能在 asp.net 中使用面板

c# - 程序 (c#) 运行提升,仍然无法访问某些文件

c++ - 库通常带有头文件吗?

C# IIS 7.5 类未注册异常

c# - 如何以编程方式将 SQL 数据库直接导出到 blob 存储

c# - 触摸屏应用程序,我需要学习一门新语言吗?

c# - xml转数据结构

c++ - panic : Failed to load dbcapi. dll: