applicationHost.config Error: Cannot write configuration file due to insufficient permissions with IIS shared configuration
Asked Answered
G

6

20

I use the Microsoft.Web.Administration.ServerManager class to manage a web site in a windows service.

I use impersonation in my code, with an admin user, the user has the right to modify my applicationHost.config but I always get the following error when I do a .CommitChanges();.

There is an example of my code.

  using (ServerManager svr = ServerManager.OpenRemote(args.IISName))
      {           
        Site currentSite = svr.Sites.Where(item => item.Id == args.WebSite.Id).FirstOrDefault();            
        currentSite.Applications[0].VirtualDirectories[0].PhysicalPath = args.WebSite.PhysicalPath;
        svr.CommitChanges();           

      }

I find this solutions, but my dcom properties object is lock

Unhandled exception has occured in your application. If you click Continue, the application will ignore this error and attempt to continue. If you click Quit, the application will close immediately. FileName \?\UNC[MY PATH]\applicationHost.config Error: Cannot write configuration file due to insufficient permissions

My setup is Windows 2008 R2, IIS 7.5, framework 3.5 and my applicationHost.config is on a SAN

What could I try ?

See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.UnauthorizedAccessException: Filename: \\?\[MY PATH]\applicationHost.config
Error: Cannot write configuration file due to insufficient permissions


   at Microsoft.Web.Administration.Interop.IAppHostWritableAdminManager.CommitChanges()
   at Microsoft.Web.Administration.ConfigurationManager.CommitChanges()
   at Microsoft.Web.Administration.ServerManager.CommitChanges()
   at Nms.IIS.Business.Manager.IISManager70.UpdateWebSiteEntity(UpdateWebSiteEntityArgs args)
   at Nms.IIS.Business.Service.IISService70.UpdateWebSiteEntity(UpdateWebSiteEntityArgs args)
   at IISSwitcher.Form1.btnProccess_Click(Object sender, EventArgs e) in C:\Form1.cs:line 70
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.4952 (win7RTMGDR.050727-4900)
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
IISSwitcher
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file://[mypatch]/Altitude3%20Transfert/IISDirectorySwitch/IISSwitcher.exe
----------------------------------------
System.Windows.Forms
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.4927 (NetFXspW7.050727-4900)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.4927 (NetFXspW7.050727-4900)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.4927 (NetFXspW7.050727-4900)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
Nms.IIS.Business
    Assembly Version: 1.0.295.8874
    Win32 Version: 1.0.295.8874
    CodeBase: file://[mypatch]/Altitude3%20Transfert/IISDirectorySwitch/Nms.IIS.Business.DLL
----------------------------------------
Nms.Core
    Assembly Version: 1.0.1954.8874
    Win32 Version: 1.0.1954.8874
    CodeBase: file://[mypatch]/Altitude3%20Transfert/IISDirectorySwitch/Nms.Core.DLL
----------------------------------------
System.Configuration
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.4927 (NetFXspW7.050727-4900)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.4927 (NetFXspW7.050727-4900)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
Microsoft.Practices.Unity
    Assembly Version: 1.2.0.0
    Win32 Version: 1.2.0.0
    CodeBase: file://[mypatch]/Altitude3%20Transfert/IISDirectorySwitch/Microsoft.Practices.Unity.DLL
----------------------------------------
Microsoft.Practices.Unity.Interception
    Assembly Version: 1.2.0.0
    Win32 Version: 1.2.0.0
    CodeBase: file://Microsoft.Practices.Unity.Interception.DLL
----------------------------------------
Microsoft.Practices.ObjectBuilder2
    Assembly Version: 2.2.0.0
    Win32 Version: 2.2.0.0
    CodeBase: file://Microsoft.Practices.ObjectBuilder2.DLL
----------------------------------------
System.Core
    Assembly Version: 3.5.0.0
    Win32 Version: 3.5.30729.4926 built by: NetFXw7
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Core/3.5.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
Nms.Core.resources
    Assembly Version: 1.0.1954.8874
    Win32 Version: 1.0.1954.8874
    CodeBase: file://Nms.Core.resources.DLL
----------------------------------------
Unity_ILEmit_InterfaceProxies
    Assembly Version: 0.0.0.0
    Win32 Version: 1.2.0.0
    CodeBase: file://Microsoft.Practices.Unity.Interception.dll
----------------------------------------
Microsoft.Web.Administration
    Assembly Version: 7.0.0.0
    Win32 Version: 6.1.7600.16385
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/Microsoft.Web.Administration/7.0.0.0__31bf3856ad364e35/Microsoft.Web.Administration.dll
----------------------------------------
System.Runtime.Serialization
    Assembly Version: 3.0.0.0
    Win32 Version: 3.0.4506.4926 (NetFXw7.030729-4900)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Runtime.Serialization/3.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll
----------------------------------------

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
Gateway answered 17/2, 2011 at 15:31 Comment(0)
A
9

To unlock your dcom properties object, you just have 2 steps to perfom.

Step 1 - Grant you 'Full Control' on the 'Ahadmin.dll' :

  • Goto your IIS server and browse to folder 'c:\windows\system32\'
  • Find 'Ahadmin.dll' and right click on it to open properties box
  • Goto 'Security' tab and grant to your NT user 'Full control'
  • If you're not able to grant you 'Full control', goto the 'Owner' tab and add your NT user or an admin group that you're member and click 'Apply' And than return to the 'Security' tab to grant you 'Full control'

Step 2 - Grant you 'Full Control' on the registry key :

  • On the IIS server open 'Registry Editor' (Run command : regedit).
  • Place your cursor on the root in the left pane.
  • Open a find box and type 'ahadmin' and click find.
  • The registry will find a key in the right pane. Right click on the parent folder of this key and open properties box
  • Goto 'Security' tab and grant to your NT user 'Full control'
  • If you're not able to grant you 'Full control', goto the 'Owner' tab and add your NT user or an admin group that you're member and click 'Apply' And than return to the 'Security' tab to grant you 'Full control'

    You can now edit your dcom properties object

    If the dcom porperties object is still lock, just wait some minutes and try again.

    After that, you just have to follow the procedure here.

Alchemize answered 22/2, 2011 at 20:32 Comment(1)
This worked for me - strange the WCF Auto-Start was complaining when applying properties. Error: "An error occurred when saving configuration. Review details for additional information. Changes can be re-applied after dismissing this dialog. Filename: \\?\C:\Windows\system32\inetsrv\c. . .\applicationHost.config Error: Cannot write configuration file"Goldie
E
48

In our case the server disk was full. We added addtional disk space and the problem is solved.

Elytron answered 8/12, 2014 at 12:16 Comment(5)
This was also the case for usHalberd
This is typically the case. I've seen this so many times because the IIS log files can grow so quickly. Especially if the site in question is SharePoint.Ensign
This is the most probable cause, so it a should be the accepted one.Chard
Thanks for bringing back my brain to realityLavish
Same as mine. ThanksUnsuspecting
I
16

I have deleted existing applicationhost.config file from my solution and reloaded the solution again. Solution created new ApplicationHost.config file itself.

Its resolved my issue.

Inunction answered 24/1, 2017 at 5:55 Comment(2)
This worked for me. Also, note that the location of the applicationhost.config is said in the error message.Ultramontane
That file was in the .vs folder, and I just ended up deleting the whole folder, which also works.Dovecote
A
9

To unlock your dcom properties object, you just have 2 steps to perfom.

Step 1 - Grant you 'Full Control' on the 'Ahadmin.dll' :

  • Goto your IIS server and browse to folder 'c:\windows\system32\'
  • Find 'Ahadmin.dll' and right click on it to open properties box
  • Goto 'Security' tab and grant to your NT user 'Full control'
  • If you're not able to grant you 'Full control', goto the 'Owner' tab and add your NT user or an admin group that you're member and click 'Apply' And than return to the 'Security' tab to grant you 'Full control'

Step 2 - Grant you 'Full Control' on the registry key :

  • On the IIS server open 'Registry Editor' (Run command : regedit).
  • Place your cursor on the root in the left pane.
  • Open a find box and type 'ahadmin' and click find.
  • The registry will find a key in the right pane. Right click on the parent folder of this key and open properties box
  • Goto 'Security' tab and grant to your NT user 'Full control'
  • If you're not able to grant you 'Full control', goto the 'Owner' tab and add your NT user or an admin group that you're member and click 'Apply' And than return to the 'Security' tab to grant you 'Full control'

    You can now edit your dcom properties object

    If the dcom porperties object is still lock, just wait some minutes and try again.

    After that, you just have to follow the procedure here.

Alchemize answered 22/2, 2011 at 20:32 Comment(1)
This worked for me - strange the WCF Auto-Start was complaining when applying properties. Error: "An error occurred when saving configuration. Review details for additional information. Changes can be re-applied after dismissing this dialog. Filename: \\?\C:\Windows\system32\inetsrv\c. . .\applicationHost.config Error: Cannot write configuration file"Goldie
S
4

Ensure that the folder with the project is NOT encrypted. Visual Studio has problems working with encrypted folders.

I have my user folder encrypted and projects won't open until I mark these folders as non-encrypted. It's a silly that VS doesn't provide a meaningful error stating that you should remove encryption from the project folder.

To remove the encryption right click the project folder, then Advanced, then unselect the Encrypt checkbox. Apply the changes to the folder itself and all nested folders and files.

Disable encryption

Sump answered 6/10, 2016 at 15:28 Comment(1)
This was the issue for me.Dettmer
T
1

Ensure that both the file's security settings and the share's security settings allow the impersonating user to modify the file. Since you're accessing the config file with a UNC path, you need permissions at both levels.

Tenacious answered 17/2, 2011 at 22:21 Comment(1)
Along these lines, check the effective permissions on the file (something like right-click, properties, security, advanced, effective permissions). That should give you the authoritative list of what the user can do at the file system level (NTFS).Trinitrotoluene
M
0

If the virtual directory is mapped to a shared folder. Look at the permissions of the share, by default under windows 7/w2k8 shares are created with: Everyone (Read). Changing the permissions of the share to: Everyone (FullControl)

This allows IIS to do what it needs through the share, as it is not using the full physical path.

Mortal answered 25/9, 2014 at 15:1 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.