jasonpgignac
jasonpgignac

Reputation: 2306

"CS0016: Could not write to output file" error when starting an app in IIS 7

I am running Windows 7, and am not usually a developer in this setting, and have recently built a WCF Rest Service in C#, that I'm now trying to deploy to IIS just on my local machine. After much wrangling, I setup up the application, but when I navigate to the application, I get an error message: Compilation Error

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS0016: Could not write to output file 'c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\scom_sibyll\8c0b945e\9329016\App_global.asax.eagmqgcd.dll' -- 'Access is denied. '

I have hunted the web to the best of my ability, and have changed the permissions on the Temporary ASP.NET Files fodler to allow the Network Service account full rights, and done the same with the Temp folder. It copies a number of files before failing, so it has write permissions presumably, so I checked the permissions to read from my source folder, and that is working as well. I additionally noted it's crapping out when it tries to to cache the DLL file, and tried turning off my Antivirus protection, as well as turning off UAC, just to see if I could figure out what is blocking this from occurring. I'm fresh out of ideas now. Anybody have any suggestions?

Upvotes: 18

Views: 51673

Answers (14)

Somnath Kadam
Somnath Kadam

Reputation: 6357

In my case, when I change Load User Profile to True (App Pool -> Advance setting -> Load User Profile -> set to true) it works.

Upvotes: 0

Bernard Dy
Bernard Dy

Reputation: 1992

I started getting this error too recently in a corporate environment after the company implemented various security measures that took away admin rights from the users.

For developers, the company authorized the creation of accounts that could be used and we had to add these to the PC's admin group and then change the application pool's identity to use the account.

EXAMPLE (Windows 10)

Account created for developers: domain\developer

Someone with admin rights to the PC will have to do the following:

  • Go to Control Panel\User Accounts\Manage User Accounts
  • Click on the Advanced tab, and click on the Advanced user management button
  • In the lusrmgr page, click on the Groups folder in the left column to bring up groups in the center panel
  • Then secondary-click on the Administrators group and select "Add to Group..."
  • In the Administrators Properties panel, click the "Add..." button
  • A "Select Users, Computers, Service Accounts, or Groups" dialog opens. Add the account (domain\developer in this example)
  • Then click on the OK button (this button will be disabled if you don't have admin rights)

Now configure the App Pool:

  • Open IIS Manager, select Application Pools
  • Click on the application pool you want so it's highlighted, then click "Advanced Settings..." from the Actions panel on the right
  • Under the Process Model section, click on the Identity setting and the ellipses button
  • In the Application Pool Identity dialog, select "Custom account" and then click the Set button
  • Enter the account and the password

At this point I was able to close everything, restart IIS and then run my app. It could then access the temp folders it couldn't before.

Upvotes: 0

Sunil Vishnu Raskar
Sunil Vishnu Raskar

Reputation: 138

I was getting the same error while developing a web api using asp.net core 2.0 and it got resolved after restarting the machine.

Upvotes: 1

elifekiz
elifekiz

Reputation: 1506

I have permissions but I'm starting to get that error. "restart machine" works for me

Upvotes: 0

Daniel Fisher  lennybacon
Daniel Fisher lennybacon

Reputation: 4174

On Windows 8/Server 2012 there is no support for aspnet_regiis any more. I tried reinstall using windows features: fail. I tried reinstalling IIS: fail. I tried reinstall through WebPI: fail.

I solved the issue by setting the ACL's on the Windows Temp Directory.

Here is a powershell that does the job:

$dir = "C:\Windows\Temp"
$acl = get-acl -path $dir
$new = "IIS_IUSRS","Modify","ContainerInherit,ObjectInherit","None","Allow"
$accessRule = new-object System.Security.AccessControl.FileSystemAccessRule $new
$acl.SetAccessRule($accessRule)
$acl | Set-Acl $dir

Upvotes: 8

ab85
ab85

Reputation: 51

There're 3 step to do:

1 - check if "Application Pool Identity" is NetworkService

2 - NETWORK_SERVICE account needs full control on:
    . C:\Windows\Temp
    . C:\Windows\Microsoft.NET\Framework[related framework]\Temporary ASP.NET Files\

3 - restart the IIS

Error Solved

You could also try re-running regiis. "%windir%\Microsoft.NET\Framework[related framework]\aspnet_regiis -i"

Upvotes: 5

IonutC
IonutC

Reputation: 637

For me the solution was a combination of the fixes described here. I had to give to the NETWORK_SERVICE account full control on

C:\Windows\Temp

and

C:\Windows\Microsoft.NET\Framework[related framework]\Temporary ASP.NET Files\

and also change the Application Pool Identity to NetworkService.

Also do not forget to restart the IIS after you give full control to NETWORK_SERVICE on the Temp folders

Upvotes: 1

HasanG
HasanG

Reputation: 13161

This error happens when I use a bat file to delete temporary files. It probably deletes the directory itself and the given permissions are gone. So you have to restore them somehow.

The easiest way is to grant full control over following directories for Everyone:

C:\Windows\Temp

C:\Windows\Microsoft.NET\Framework[related framework]\Temporary ASP.NET Files\

Upvotes: 0

user3657646
user3657646

Reputation: 31

This KB resolved it for me, it appears that the temp file path was nonexistent in the OS environmental variables.

http://support.microsoft.com/kb/825791

Upvotes: 2

BrettB
BrettB

Reputation: 114

On Windows 8 absolutely nothing worked for me. One day app pools suddenly decided they no longer want to work under the NetworkService account.

I solved the problem by changing the app pool to work under my own user account. Not a great solution I know, but it worked.

Upvotes: 0

user2202819
user2202819

Reputation: 1

Some times the Temp files might be locked by other process in the workstation. As a first step please reboot the workstation and check the application.

Upvotes: 0

Nedcode
Nedcode

Reputation: 341

I granted read and write access to C:\Windows\Temp for the IIS_WPG group. This worked for me. I'm on Server 2003 R2 and IIS 6 and the group name is different. I fount it from http://learn.iis.net/page.aspx/140/understanding-built-in-user-and-group-accounts-in-iis/ where it says:

•The IUSR built-in account replaces the IUSR_MachineName account.

•The IIS_IUSRS built-in group replaces the IIS_WPG group.

Thanks to Dommer for suggesting the windows temp folder and to zcrar70 for the nice summery and a link with detailed description.

Upvotes: 1

zcrar70
zcrar70

Reputation: 3194

For those looking here as I did, if the accepted answer doesn't resolve the issue you might try following this article: http://lordzoltan.blogspot.com/2011/02/aspnet-2-and-4-default-application-pool.html

In summary, it seems that the same error is sometimes displayed when the app pool user doesn't have access to the %TMP%/%TEMP% folder.

You'll need to grant IIS_IUSRS read and modify access over the temp folder of the user the app pool is running as.

This could either be the temp folder in the app pool user's profile, e.g. c:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp, or the system temp folder at c:\windows\temp.

Setting this up this resolved the issue for me.

Upvotes: 58

MattC
MattC

Reputation: 4004

Sounds like the account that the WCF service is running under does not have access to write to the "Temporary ASP.NET Files" directory.

You could also try re-running regiis.

%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis -i

ASP.NET IIS Registration Tool (Aspnet_regiis.exe)

Upvotes: 12

Related Questions