ServerManager.CommitChanges()抛出错误:“无法写入配置文件”

时间:2014-06-17 12:56:31

标签: c# iis

这是我创建应用程序的代码

 public static bool CreateApplication(String websiteName, String applicationName, String AppDIR,String appPoolName)
        {
            try
            {
                var windowsDir = Environment.GetEnvironmentVariable("SystemRoot");
                Process.Start(windowsDir+@"\system32\inetsrv\appcmd","unlock config -section:system.webServer/security/authentication/windowsAuthentication");      
                Process.Start(windowsDir+@"\system32\inetsrv\appcmd","unlock config -section:system.webServer/security/authentication/anonymousAuthentication");

                ServerManager iisManager = new ServerManager();

                if (!applicationName.Contains("/"))
                    applicationName = "/" + applicationName;               

                var app = iisManager.Sites[websiteName].Applications.Add(applicationName, AppDIR);                             


                app.ApplicationPoolName = appPoolName;

                var config = app.GetWebConfiguration();
                var anonsection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication", iisManager.Sites[websiteName].Name + applicationName);
                anonsection["enabled"] = false;

                var winsection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", iisManager.Sites[websiteName].Name + applicationName);
                winsection["enabled"] = true;

                iisManager.CommitChanges(); //Blows up here
                return true;
            }
            catch
            {
                return false;
            }
        }

一切正常,直到它发出提交更改方法调用。

它会抛出此错误

  

错误:无法写入配置文件

除了我将启用的值更改为false和true之外,所有代码都被验证为有效。

当我添加它们时,它开始爆炸。

有没有办法从代码中解决这个问题,可以分发给其他机器?

更新

重新锁定文件后

像这样

 Process.Start(windowsDir + @"\system32\inetsrv\appcmd", "lock config -section:system.webServer/security/authentication/windowsAuthentication");
 Process.Start(windowsDir + @"\system32\inetsrv\appcmd", "lock config -section:system.webServer/security/authentication/anonymousAuthentication");

我现在收到此错误

  

错误:无法提交配置更改,因为该文件具有   在磁盘上更改

1 个答案:

答案 0 :(得分:0)

我还遇到了我们用于配置IIS服务器作为部署操作一部分的c#应用程序的两个问题中的第二个(Error: Cannot commit configuration changes because the file has changed on disk)。

最后,对于我来说,无意中使用围绕导致问题的ServerManager对象的语句嵌套了两个。

对于您的特定情况,我会尝试添加using语句以供您对ServerManager的引用,并确保命令行appcmd调用在using语句之外或在使用中移动声明,但通过ServerManager对象转换为API调用。