web-dev-qa-db-ja.com

IIS 7でアプリを起動すると、「CS0016:出力ファイルに書き込めませんでした」エラー

私はWindows 7を実行していて、通常はこの設定の開発者ではありません。最近C#でWCF Rest Serviceをビルドしました。これをIISマシン。多くのラングリングの後、アプリケーションをセットアップしましたが、アプリケーションに移動すると、エラーメッセージが表示されます:コンパイルエラー

説明:この要求の処理に必要なリソースのコンパイル中にエラーが発生しました。次の特定のエラーの詳細を確認し、ソースコードを適切に変更してください。

コンパイラエラーメッセージ:CS0016:出力ファイル 'c:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\scom_sibyll\8c0b945e\9329016\App_global.asax.eagmqgcd.dll'に書き込めませんでした- 「アクセスが拒否されました。 」

私はできる限りWebを狩り、Temporary ASP.NET Filesフォドラーのアクセス許可を変更して、Network Serviceアカウントに完全な権限を許可し、Tempフォルダーでも同じことを行いました。失敗する前にいくつかのファイルをコピーするので、おそらく書き込み権限があるので、ソースフォルダーから読み取る権限を確認しましたが、これも機能しています。さらに、DLLファイルをキャッシュしようとすると、それがバタバタしていることを指摘し、UACをオフにするだけでなく、アンチウイルス保護もオフにしてみました。これが起こらないようにブロックしています。今はアイデアが新鮮です。誰か提案はありますか?

16
jasonpgignac

WCFサービスが実行されているアカウントには、「一時ASP.NETファイル」ディレクトリへの書き込みアクセス権がないようです。

Regiisを再実行することもできます。

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

ASP.NET IIS登録ツール(Aspnet_regiis.exe))

11
MattC

私と同じようにここを見る人にとって、受け入れられた回答で問題が解決しない場合は、次の記事を試してみてください: 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のシステム一時フォルダ。

これを設定すると、問題が解決しました。

51
zcrar70

Windows 8/Server 2012では、aspnet_regiisはサポートされなくなりました。 Windowsの機能を使用して再インストールを試みましたが、失敗しました。 IISの再インストールを試みましたが、失敗しました。 WebPIを使用して再インストールを試みましたが、失敗しました。

Windowsの一時ディレクトリに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

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\Framework [関連フレームワーク]\aspnet_regiis -i"

5
ab85

このKBで解決しました。一時ファイルのパスがOS環境変数に存在しないようです。

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

2
user3657646

Asp.netコア2.0を使用してWeb APIを開発しているときに同じエラーが発生しましたが、マシンを再起動すると解決しました。

1

私にとっての解決策は、ここで説明した修正の組み合わせでした。 NETWORK_SERVICEアカウントにフルコントロールを付与する必要がありました

C:\ Windows\Temp

そして

C:\ Windows\Microsoft.NET\Framework [関連するフレームワーク]\Temporary ASP.NET Files \

また、アプリケーションプールIDをNetworkServiceに変更します。

TempフォルダーのNETWORK_SERVICEにフルコントロールを与えた後、IISを再起動することも忘れないでください。

1
IonutC

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グループを置き換えます。

Windowsの一時フォルダを提案してくれたDommerに感謝し、Nice Summeryと詳細な説明へのリンクを提供してくれたzcrar70に感謝します。

1
Nedcode

権限がありますが、エラーが発生し始めています。 「マシンを再起動」は私のために働く

0
elfekz

Tempファイルがワークステーション内の他のプロセスによってロックされている場合があります。最初のステップとして、ワークステーションを再起動し、アプリケーションを確認してください。

0
user2202819

Windows 8では、何もうまくいきませんでした。ある日、アプリプールは突然、NetworkServiceアカウントでの作業をやめることを決定しました。

アプリプールを自分のユーザーアカウントで動作するように変更して、問題を解決しました。私が知っている素晴らしい解決策ではありませんが、それはうまくいきました。

0
BrettB

会社がユーザーから管理者権限を奪うさまざまなセキュリティ対策を実装した後、企業環境でこのエラーが発生し始めました。

開発者の場合、会社は使用可能なアカウントの作成を承認し、これらをPCの管理グループに追加してから、アカウントを使用するようにアプリケーションプールのIDを変更する必要がありました。

例(Windows 10)

開発者用に作成されたアカウント:domain\developer

PCの管理者権限を持つユーザーは、次のことを行う必要があります。

  • コントロールパネル\ユーザーアカウント\ユーザーアカウントの管理に移動します。
  • [詳細設定]タブをクリックし、[詳細なユーザー管理]ボタンをクリックします
  • Lusrmgrページで、左側の列にある[グループ]フォルダーをクリックして、中央パネルにグループを表示します
  • 次に、Administratorsグループをセカンダリクリックし、[グループに追加...]を選択します。
  • [管理者のプロパティ]パネルで、[追加...]ボタンをクリックします
  • 「ユーザー、コンピュータ、サービスアカウント、またはグループの選択」ダイアログが開きます。アカウントを追加します(この例ではdomain\developer)
  • 次に、[OK]ボタンをクリックします(このボタンは、管理者権限がない場合は無効になります)。

次に、アプリプールを構成します。

  • IISマネージャを開き、アプリケーションプールを選択します
  • 目的のアプリケーションプールをクリックして強調表示し、右側の[アクション]パネルから[詳細設定...]をクリックします。
  • [プロセスモデル]セクションで、ID設定と省略記号ボタンをクリックします。
  • [アプリケーションプールID]ダイアログで、[カスタムアカウント]を選択し、[設定]ボタンをクリックします
  • アカウントとパスワードを入力してください

この時点で、すべてを閉じ、IISを再起動してからアプリを実行することができました。これにより、以前はできなかった一時フォルダにアクセスできるようになりました。

0
Bernard Dy

このエラーは、batファイルを使用して一時ファイルを削除すると発生します。それはおそらくディレクトリ自体を削除し、与えられた許可はなくなります。だから、どういうわけかそれらを復元する必要があります。

最も簡単な方法は、Everyoneに対して以下のディレクトリを完全に制御できるようにすることです。

C:\ Windows\Temp

C:\ Windows\Microsoft.NET\Framework [関連するフレームワーク]\Temporary ASP.NET Files \

0
HasanG