2011-03-14 48 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

我有權限,但我開始得到這個錯誤。 ‘重新啓動機器’的作品對我來說

相關問題