我想使用Microsoft.Web.Administration.dll中的ServerManager对象读取应用程序池的某些设置。问题是只有当应用程序池的标识是具有管理员权限的Windows用户时,它才有效。否则我收到UnauthorizedAccessException - Filename:redirection.config;错误:由于权限不足而无法读取配置文件。 有关此问题的解决方法吗? 我的代码如下:
ServerManager manager = new ServerManager();
string currentSiteName = System.Web.Hosting.HostingEnvironment.SiteName;
Site currentSite = manager.Sites[currentSiteName];
string appVirtaulPath = HttpRuntime.AppDomainAppVirtualPath;
string appPoolName = string.Empty;
foreach (Application app in currentSite.Applications)
{
string appPath = app.Path;
if (appPath == appVirtaulPath)
{
appPoolName = app.ApplicationPoolName;
}
}
ApplicationPool currentAppPool = manager.ApplicationPools[appPoolName];
谢谢!
答案 0 :(得分:2)
不,没有解决方法来读取配置文件而不会引起很大的安全问题。你想达到什么目的?
如果阅读配置设置,您可以在同一个DLL中使用API,该API将为您提供该站点设置的只读配置访问权限,例如只读取该站点的web.config或applicationHost.config中的值,而不是加密的(如密码)。该API称为WebConfigurationManager,它有一个名为GetSection的静态方法,例如WebConfigurationManager.GetSection(" system.webServer / defaultDocument")
但是,无法通过该API读取多个设置(即用于启动进程w3wp.exe的所有设置)。 简短的故事:不幸的是出于安全原因,很多这些设置都无法从工作进程中读取。您可以使用服务器变量读取一些内容,例如Request.ServerVariables [" APP_POOL_ID"])或Request.ServerVariables [" APP_POOL_CONFIG"])。当然比特你可以计算指针的大小(4或8),或使用环境变量(如PROCESSOR_ARCHITECTURE)
更长的故事:出于安全原因,我们在IIS中使用applicationHost.config文件并将其拆分为较小的应用程序pool.config文件(默认情况下位于C:\ inetpub \ temp \ appPools)这些是出于安全原因而被隔离的,因此即使不受信任的代码在进程中运行(w3wp.exe)以试图窃取/读取其他站点的设置,实际上也是不可能的。您可以打开文件并查看哪些设置,您可以阅读这些设置。您会注意到appPools部分完全丢失,因为它仅用于WAS启动w3wp.exe。