ServerManager.CommitChanges()抛出错误:"不能写配置文件"

本文关键字:quot 不能 配置文件 错误 CommitChanges 出错 ServerManager | 更新日期: 2023-09-27 18:08:53

下面是我创建一个应用程序的代码

 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;
            }
        }

一切都很好,直到它碰到commit changes方法调用。

抛出这个错误

错误:Cannot write configuration file

所有的代码都被验证为工作,除了我将启用值更改为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");

我现在得到这个错误

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

ServerManager.CommitChanges()抛出错误:"不能写配置文件"

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

对我来说,最后是无意中嵌套了两个using语句,包裹在ServerManager对象周围,导致了这个问题。

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

相关文章: