ServiceOnset is an utility to help you to run one or more programs as a 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.
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,
"allowWindow": false,
"enableLog": true
},
{
"name": "mywinTesting",
"command": "mywin"
}
]
}
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 or not). 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 |
|
allowWindow | bool | false | If true , will not restrict the wrapped program showing an UI; otherwise, will try to do that by setting "CreateNoWindow=true" or "WindowStyle=Hidden" |
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