次の方法で、IIS 7 アプリケーション プールを開始/停止しようとしています。ローカル システムではこれを正常に実行できますが、これを Windows 2008 サーバーに配置すると、サービスを停止しようとしたときにのみエラーが発生します。開始は正常に機能します。
[NoCache]
public ActionResult EnableAppPool(Models.ActionRequest actionRequest)
{
try
{
if (ModelState.IsValid && actionRequest.ActionRequestPassword == ConfigurationManager.AppSettings["NewsfeedAdminPassword"])
{
bool enableNewsfeed = false;
enableNewsfeed = Convert.ToBoolean(actionRequest.EnableNewsfeedAppPool);
string sPath = "IIS://" + ConfigurationManager.AppSettings["MachineName"] + "/W3SVC/AppPools/" + ConfigurationManager.AppSettings["AppPoolName"];
Console.WriteLine(sPath);
DirectoryEntry w3svc = new DirectoryEntry(sPath);
if (enableNewsfeed)
{
w3svc.Invoke("Start");
}
else
{
w3svc.Invoke("Stop");
}
}
}
catch (Exception ex)
{
throw ex;
}
return null;
}
エラーは次のとおりです。
アクセスが拒否されました。(HRESULT からの例外: 0x80070005 (E_ACCESSDENIED)) 説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.UnauthorizedAccessException: アクセスが拒否されました。(HRESULT からの例外: 0x80070005 (E_ACCESSDENIED))
ASP.NET は、要求されたリソースへのアクセスを許可されていません。リソースへのアクセス権を ASP.NET 要求 ID に付与することを検討してください。ASP.NET には、アプリケーションが偽装されていない場合に使用されるベース プロセス ID (通常、IIS 5 または IIS 6 および IIS 7 のネットワーク サービスの {MACHINE}\ASPNET、および IIS 7.5 の構成済みアプリケーション プール ID) があります。アプリケーションが を介して偽装している場合、ID は匿名ユーザー (通常は IUSR_MACHINENAME) または認証された要求ユーザーになります。
これはアクセス許可の問題であることは認識していますが、何にアクセスを許可しなければならないのか、どのユーザーに対してアクセスを許可する必要があるのか わかりません。
参考までに: IIS 6 メタベースと WMI の互換性は既に有効にしています