我在.Net中有一个应用程序,为其他应用程序执行各种管理/配置。我需要能够停止并启动应用程序池。我已经实现了这一点,但只有当我运行应用程序池作为本地系统(这通常被认为是一个坏主意)。如何在不将应用程序池标识设置为本地系统的情况下从网站重新启动应用程序池?
最初我用Process.Start启动了appcmd.exe(使用适当的ProcessStartInfo对象),但这最终导致我得到-1073741502的退出代码,进一步的研究表明我需要使用Windows SDK进行调试,因为它有一些东西与一个没有加载的程序集有关,所以我发现在Microsoft.Web.Administration
命名空间中看起来像一个更简单的解决方案:
我使用下面的代码,但它似乎需要运行它的AppPool具有本地系统的身份(否则我得到System.UnauthorizedAccessException
) - 有没有办法开始/停止权限较低的帐户(我宁愿使用应用程序标识) - 虽然临时提升权限也是可以接受的。
Dim serverManager As New ServerManager()
Dim applicationPoolCollection As ApplicationPoolCollection = serverManager.ApplicationPools
For Each applicationPool As ApplicationPool In applicationPoolCollection
If applicationPool.Name = appPoolName Then
applicationPool.Stop()
applicationPool.Start()
End If
Next
我已经设置了一个自定义帐户作为身份,但我无法确定该用户的最低ACL是什么。作为测试,我将该用户添加到本地管理员组,但仍获得System.UnauthorizedAccessException
- 这表明我需要为该用户配置特定的权限,但我不确定这是什么或如何执行此操作。谁能帮忙?
Problem is explained here also
谢谢你,你能不能详细阐述如下:你如何配置一个最小的表面/本地唯一的无障碍任何链接/信息?我可以尝试的另一个选项是启动一个应用程序,使用Process.Start执行Admin Credentials所需的操作。 –
创建应用程序不起作用,同样的问题。 –
感谢您的回答,我已经添加了我自己的下面,以防其他人帮助。积分奖励。 –