In below code, I am sharing different approaches which can help you:-
namespace Utilities.General
{
public static class Utility
{
public static bool RestartAppPool()
{
//First try killing your worker process
try
{
//Get the current process
Process process = Process.GetCurrentProcess();
// Kill the current process
process.Kill();
// if your application have no rights issue then it will restart your app pool
return true;
}
catch (Exception ex)
{
//if exception occoured then log exception
Logger.Log("Restart Request Failed. Exception details :-" + ex);
}
//Try unloading appdomain
try
{
//note that UnloadAppDomain requires full trust
HttpRuntime.UnloadAppDomain();
return true;
}
catch (Exception ex)
{
//if exception occoured then log exception
Logger.Log("Restart Request Failed. Exception details :-" + ex);
}
//Finally automating the dirtiest way to restart your application pool
//get the path of web.config
string webConfigPath= HttpContext.Current.Request.PhysicalApplicationPath + "\\web.config";
try
{
//Change the last modified time and it will restart pool
File.SetLastWriteTimeUtc(webConfigPath, DateTime.UtcNow);
return true;
}
catch (Exception ex)
{
//if exception occoured then log exception
Logger.Log("Restart Request Failed. Exception details :-" + ex);
}
//Still no hope, you have to do something else.
return false;
}
}
}
To implement above case you can create a dummy page i.e. RestartApplication.aspx or add a querystring parameter to your existing page like Home.aspx?RestartPool=true. Feel free to share your thoughts with me. Happy Codding !!!