3

我从用 C# 编写的 Windows 服务调用以下代码:

try
{
    ServerManager m = new ServerManager();
    if(m != null)
    {
            SiteCollection sites = m.Sites;          //I get exception here
    }
}
catch (Exception ex)
{
}

我得到这个例外:

{"文件名:redirection.config\r\n错误:无法读取配置文件\r\n\r\n":null}

这意味着什么?有什么方法可以在m抛出之前在 ServerManager 或我的变量中预测它?

4

1 回答 1

9

更新:现在查看您的评论后,我可以完全回答问题,问题是您的应用程序引用了错误的 Microsoft.Web.Administration.dll,看到错误告诉我您引用的是 IIS Express 版本而不是“完整” IIS 版本 (7.0.0.0)。因此,请修改您的应用程序代码以添加对 c:\windows\system32\inetsrv\Microsoft.Web.Administration.dll 中的引用的引用。

这是一个权限问题。

您需要确保以管理员组或 SYSTEM 成员身份运行 Windows 服务。我的猜测是您可能将服务作为本地服务或网络服务运行,而那些没有权限读取位于 %windows%\system32\inetsrv\config 中的配置文件。

其他信息:
Redirection.config 是 IIS 用来确定是应该从正常路径 (%windir%\system32\inetsrv\config\applicationHost.config) 读取其配置还是应该从外部 UNC 文件共享中读取配置的文件当集中配置用于许多服务器时。这就是为什么这是要解析的第一个文件之一,因此您会收到该特定文件的访问被拒绝错误。

关于预测,最好的办法是在 try/catch 中创建它并处理它。读取配置时可能会发生许多异常,例如权限(您可以通过确保您可以读取(例如 File.OpenText())到 Redirection.config、ApplicationHost.config in %windir%\system32\inetsrv 来预测这一点\config 但这是猜测,还有其他一些问题,例如访问密码的加密密钥、无效的配置等)

于 2013-04-04T05:39:59.217 回答