我在 .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
- 这表明我需要为用户配置特定权限,但我不确定这是什么或如何做。任何人都可以帮忙吗?