ServiceOnset is an exciting utility to help you to run one or more programs as single windows service. Is it cool?
The most typical usage is for Node.js, COW, regular jobs and so on.
ServiceOnset is a wrapper program implemented as a windows service. So it enables some of foreground applications started before login.
Known Issue #7. ServiceOnset currently CANNOT support an UI-based program because of the session 0 isolation problem on Win2008 or above. Only added Interop.cs
as a preparation for further enhancement.
Windows operation with Microsoft .NET Framework 4.0
- Clone and build the solution with
VisualStudio
, or DOWNLOAD the binary package directly.
log4net.config
log4net.dll
ServiceOnset.exe
ServiceOnset.exe.json
- Start a command line with Administrator privilege.
- Navigate to the directory of the binary package.
- Run
C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe ServiceOnset.exe
to install the service. Optional.
If you got an error like below (Issue #3), pleaseright-click
ServiceOnset.exe file and clickUnblock
button in the program's property window.
Exception occurred while initializing the installation:
System.IO.FileLoadException: Could not load file or assembly '...\ServiceOnset.exe' or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515).
- Change the config of ServiceOnset as you want. Refer to ServiceOnset.exe.json
Optional.
Change the config of log4net if you want assign a dedicated logger for a service. Refer to log4net Config
<log4net>
<root>
<appender-ref ref="Default" />
</root>
<appender name="Default" type="log4net.Appender.RollingFileAppender">
<file value="logs/log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd".log"" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
</log4net>
- Open windows services manager and start ServiceOnset service. Or directly execute
net start ServiceOnset
. - Enjoy ~
- Stop the service
net stop ServiceOnset
if it is running. - Start a command line with Administrator privilege.
- Navigate to the directory of the binary package.
- Run
C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /u ServiceOnset.exe
to remove the service. - Clean up the directory.
{
"enableLog": true,
"services": [
{
"name": "PingBaidu",
"command": "ping",
"arguments": "www.baidu.com",
"workingDirectory": "",
"runMode": "interval",
"intervalInSeconds": 10,
"useShellExecute": false,
"killExistingProcess": false,
"enableLog": true
},
{
"name": "mywin_AppPath",
"command": "mywin",
"killExistingProcess": true
},
{
"name": "mywin_RelativePath",
"command": "test\\mywin.exe",
"runMode": "interval",
"killExistingProcess": true
}
]
}
Property | Value type | Required | Default | Description |
---|---|---|---|---|
enableLog | bool | false | Determinate if generate logs by log4net |
|
services | array | Yes | (empty) | Program definitions hosted by ServiceOnset |
name | string | Yes | Program identifier, must be same to the corresponding logger name | |
command | string | Yes | Command (with full path, relative path (Issue #5) or Windows ENV path). eg.: ping |
|
arguments | string | "" | Command arguments. eg.: www.baidu.com |
|
workingDirectory | string | Command path, or ServiceOnset path | Working directory. eg.: D:\\ServiceOnset\\ |
|
runMode | enum | "daemon" | "daemon" : Auto-restart the program if it exited"launch" : Launch the program once and let it be"interval" : Restart the program termly by force kill the running process |
|
intervalInSeconds | int | 30 | Detecting interval in seconds for current run mode | |
useShellExecute | bool | false | Start a process by UseShellExecute. Will omit the standard output of a console when the value is true |
|
killExistingProcess | bool | false | If true , will try to kill the existing process whose file name equals [Command] when initializing the service entry. Here any error will be ignored except logging |
Case sample for COW
- Make sure
cow.exe
orcow-hide.exe
orcow-taskbar.exe
withrc.txt
can work. - Extract ServiceOnset binary package to COW directory. And config like this:
{
"enableLog": true,
"services": [
{
"name": "COW",
"command": "cow.exe"
}
]
}
Contact QQ: 9812152 @Hedda