1. Найти файл настроек IIS: %WINDIR%\System32\inetsrv\config\applicationHost.config
2. В этом файле найти секцию applicationPools, найти там нужный appPool, добавить/заменить атрибуты на autoStart="true" startMode="AlwaysRunning", должно быть типа такого:
<applicationPools>
<add name="DefaultAppPool" autoStart="true" startMode="AlwaysRunning" managedRuntimeVersion="v4.0">
3. Найти секцию sites, в ней нужный site, а там нужный application и добавить туда в тег application два атрибута: serviceAutoStartEnabled="true" serviceAutoStartProvider="ApplicationPreload"
<sites>
<site name="Default Web Site" id="1" serverAutoStart="true">
<application path="/" serviceAutoStartEnabled="true" serviceAutoStartProvider="ApplicationPreload"
4. Ниже, прямо после секции sites или перед закрытием тега system.applicationHost добавьте:
<serviceAutoStartProviders>
<add name="ApplicationPreload" type="MyNamespace.ApplicationPreload, MyAssembly" />
</serviceAutoStartProviders>
Обратите внимание! Значение
name должно совпадать с значением
serviceAutoStartProvider.
Значением
type должно быть полное имя класса-загрузчика (неймспейс, сборка), который будет запускать quartz при старте сайта.
5. Реализовать собственно класс-загрузчик:
public class ApplicationPreload : System.Web.Hosting.IProcessHostPreloadClient
{
public void Preload(string[] parameters)
{
// Qurtz.Net.Start() // или как там хз
}
}
При этом надо помнить, что пул может быть всё равно "прибит" IIS-ом, например, если исчерпан лимит по памяти. Необработанное исключение в вашем коде может его также остановить. Но после остановки он должен сразу же запускаться. Т.е. нельзя надеяться что некий код будет работать 24/7. Он будет прерываться, но сразу же запускаться.
Также, лучше код запуска qurtz-а (тот что в методе Preload(string[])) повторить в методе Application_Start в Global.asax для надежности.