Let us say I have prepared my Quartz.NET as a Windows service and it is currently being run (with an ADOJobStore running on Sqlite). I need to take
Starting and stopping the Windows service is not related to Quartz. There seems to be a .NET API for that, but I'm not familiar with it.
As for adding and removing jobs. You won't get the instance of the Windows service's scheduler. There are two ways to work around it.
Add
<add key="quartz.jobStore.clustered" value="true"/>
to both app and web configs. If I remember correctly, no additional code is required. Additionally you prevent the Windows app form executing a job by setting up a zero-size thread pool:
<add key="quartz.threadPool.type" value="Quartz.Simpl.ZeroSizeThreadPool, Quartz"/>
Now, you instantiate a scheduler in your Windows app and use it to add and remove jobs. The jobs will be stored in the ADO job store and picked up by the Windows service. Both app and service must have the same ADO job setore configured, obviously, and the Windows app must have access to the sqlite db.
One more thing. Using the second approach you won't be able to interrupt a running job form the Windows app.
Your service can expose the scheduler by modifying the config file:
<add key="quartz.scheduler.exporter.type" value="Quartz.Simpl.RemotingSchedulerExporter, Quartz" />
<add key="quartz.scheduler.exporter.port" value="555" />
<add key="quartz.scheduler.exporter.bindName" value="QuartzScheduler" />
<add key="quartz.scheduler.exporter.channelType" value="tcp" />
<add key="quartz.scheduler.exporter.channelName" value="httpQuartz" />
Your Windows app can then accesss it with the appropriate settings:
//you can put these in a config file too.
NameValueCollection properties = new NameValueCollection();
properties["quartz.scheduler.instanceName"] = "RemoteClient";
// set thread pool info
properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
properties["quartz.threadPool.threadCount"] = "5";
properties["quartz.threadPool.threadPriority"] = "Normal";
// set remoting expoter
properties["quartz.scheduler.proxy"] = "true";
properties["quartz.scheduler.proxy.address"] = "tcp://127.0.0.1:555/QuartzScheduler";
ISchedulerFactory sf = new StdSchedulerFactory(properties);
IScheduler sched = sf.GetScheduler();
The quartz.net master contains really good examples that you won't find in the documentation.