更改应用程序池标识时出错

本文关键字:标识 出错 程序池 应用程序 应用 | 更新日期: 2023-09-27 18:07:55

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

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的更新。配置需要管理权限。当您在本地运行时,您是管理员。在云中,除非您提升角色,否则您的RoleEntryPoint将作为普通用户运行。你这样做了吗?

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

Edit: Wade还展示了如何使用稍微不同的方法来完成此操作(请查看注释)。试试这个

好的,这是我的答案。发生此错误是因为NetworkService标识对iisWasKey键没有Read访问权限。更多信息和如何解决这个问题,我发现在这里:"Keyset不存在"错误消息,当你试图改变一个应用程序池的身份