2011-03-14 49 views
14

我正在运行Windows 7,并且通常不是此设置中的开发人员,并且最近在C#中构建了一个WCF Rest服务,现在试图部署到我的本地机器上的IIS。很多争吵之后,我安装了应用程序,但是,当我浏览到应用程序,我得到一个错误信息: 编译错误在IIS 7中启动应用程序时出现“CS0016:无法写入输出文件”错误

说明:该请求提供服务所需资源的编译过程中出现错误。请查看以下具体的错误细节并适当修改您的源代码。

编译器错误消息:CS0016:无法写入输出文件'c:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ scom_sibyll \ 8c0b945e \ 9329016 \ App_global.asax.eagmqgcd。 DLL' - '访问被拒绝。 “

我曾猎杀过网,尽我的能力,并改变了对ASP.NET临时文件fodler权限,以允许网络服务帐户完全权限,并完成与Temp文件夹相同。它在失败之前复制了许多文件,因此它具有写入权限,因此我检查了从我的源文件夹读取的权限,这也是可行的。另外我还注意到,它在试图缓存DLL文件时试图阻止,并尝试关闭我的防病毒保护,并关闭UAC,只是想知道是否可以确定阻止这种情况发生的原因。我现在刚刚摆脱想法。任何人有任何建议?

+0

确保您的IIS身份具有正确的在你的文件夹中的权限 – 2011-03-14 15:06:51

回答

10

听起来像WCF服务正在运行的帐户无权写入“Temporary ASP.NET Files”目录。

你也可以尝试重新运行regiis。

%WINDIR%\ Microsoft.NET \ Framework64 \ v4.0.30319 \ ASPNET_REGIIS -i

ASP.NET IIS Registration Tool (Aspnet_regiis.exe)

+0

这就是我所想到的,但WCF服务应该默认作为网络服务运行,对吗?是否有办法确认这一点?我检查了这个帐户的权限。已经尝试了aspnet_regiis命令,我忘了提及它,谢谢。其他想法? – jasonpgignac 2011-03-14 15:15:59

+1

检查您的Web应用程序在哪个应用程序池中运行。在该应用程序ppol的属性窗体上,您将能够看到池的标识一世正在运行。 除非,您正在使用模拟和IS配置为使用Windows身份验证。 是否有条目发布到事件日志?它显示哪个帐户无法访问该文件夹? – MattC 2011-03-14 15:18:28

+0

完美!谢谢,对于新手问题抱歉 - 它没有设置为正确的用户帐户。现在感觉很蠢:D – jasonpgignac 2011-03-14 15:40:12

45

对于那些在这里寻找像我一样,如果接受的答案不能解决问题,您可能请尝试关注此文章:http://lordzoltan.blogspot.com/2011/02/aspnet-2-and-4-default-application-pool.html

总之,当应用程序池用户无法访问%TMP%/%TEMP%文件夹时,有时会显示相同的错误。

你需要授予IIS_IUSRS读取和修改过的临时文件夹的应用程序池运行为用户的访问。

这可能是应用程序池用户配置文件中的临时文件夹,例如c:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp或系统临时文件夹c:\windows\temp

设置它解决了这个问题。

+9

+1授予访问'C:\ Windows \ Temp'似乎为我修复它(尽管错误信息是相反的)。谢谢! – 2011-10-27 22:48:40

+0

这个解决方案对我来说非常合适。在IIS 7上安装PHP之后,我遇到了这个问题。 – 2012-09-05 22:04:56

+2

授予对c:\ windows \ temp的访问权限。 – 2012-10-02 17:36:01

1

我授予了对IIS_WPG组的C:\ Windows \ Temp的读取和写入权限。这对我有效。我在Server 2003 R2和IIS 6上,组名是不同的。我从http://learn.iis.net/page.aspx/140/understanding-built-in-user-and-group-accounts-in-iis/那里得知它:

•IUSR内置帐户取代了IUSR_MachineName帐户。

•IIS_IUSRS内置组替换IIS_WPG组。

感谢Dommer为建议的Windows临时文件夹和zcrar70为美好的夏日和一个详细的描述链接。

7

在Windows 8/Server 2012上,不再支持aspnet_regiis。 我尝试使用Windows功能重新安装:失败。 我试过重新安装IIS:失败。 我试图通过WebPI重新安装:失败。

我通过在Windows Temp目录中设置ACL来解决该问题。

这里是一个PowerShell,没有工作:

$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 
+0

我认为完全控制有点过分。修改就好了。 – 2016-12-01 21:57:43

+0

@CarlR最小特权当然是首选! – 2016-12-04 12:45:34

0

有时候临时文件可能在工作站等过程被锁定。作为第一步,请重新启动工作站并检查应用程序。

0

在Windows 8上绝对没有任何工作适合我。有一天,应用程序池突然决定不再想在NetworkService帐户下工作。

我通过更改应用程序池在我自己的用户帐户下工作来解决了这个问题。我知道这不是一个很好的解决方案,但它很有效。

2

这个KB为我解决了这个问题,看起来临时文件路径在OS环境变量中是不存在的。

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

+0

4小时 - 这是治疗! 一个应用程序已经改变了环境变量并且将它竖起来 - 欢呼的家伙! – Dandymon 2014-12-03 22:17:31

+0

按照答案链接中建议的方式(在更改临时文件夹的权限后)在命令行上键入iisreset为我完成了这项工作 – 2016-06-14 22:41:45

0

这个错误,当我用一个bat文件删除临时文件发生。它可能会删除目录本身,并且给定的权限不见了。所以你必须以某种方式恢复它们。

最简单的方法是在以下目录授予完全控制所有人:

C:\ WINDOWS \ TEMP

C:\ WINDOWS \ Microsoft.NET \框架[相关框架] \临时ASP。 NET Files \

1

对我来说,解决方案是这里描述的修复程序的组合。我不得不放弃到NETWORK_SERVICE帐户完全控制在

C:\ WINDOWS \ TEMP

C:\ WINDOWS \ Microsoft.NET \框架[相关框架] \临时ASP.NET文件\

并且还将应用程序池标识更改为NetworkService。

另外别忘了重新启动IIS您充分控制NETWORK_SERVICE上的Temp文件夹

+0

引用Ghostbusters的一个精彩音乐作品。 - 节省一天! https://www.youtube.com/watch?v=mNuG25oq_b0 – 2016-12-04 09:52:58

5

是有3步后做:

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 

错误解决

你也可以尝试重新运行regiis。 “%windir%\ Microsoft。NET \框架[相关框架] \ ASPNET_REGIIS -i”

+0

嗨,谢谢你让我的一天... – 2016-11-30 16:25:15

0

我有权限,但我开始得到这个错误。 ‘重新启动机器’的作品对我来说

相关问题