|
|
@@ -73,17 +73,28 @@ namespace winsw
|
|
|
var n = dom.SelectSingleNode("//" + tagName);
|
|
|
if (n == null) throw new InvalidDataException("<" + tagName + "> is missing in configuration XML");
|
|
|
return Environment.ExpandEnvironmentVariables(n.InnerText);
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// Path to the executable.
|
|
|
- /// </summary>
|
|
|
- public string Executable
|
|
|
- {
|
|
|
- get
|
|
|
- {
|
|
|
- return SingleElement("executable");
|
|
|
- }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Path to the executable.
|
|
|
+ /// </summary>
|
|
|
+ public string Executable
|
|
|
+ {
|
|
|
+ get
|
|
|
+ {
|
|
|
+ return SingleElement("executable");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Optionally specify a different Path to an executable to shutdown the service.
|
|
|
+ /// </summary>
|
|
|
+ public string StopExecutable
|
|
|
+ {
|
|
|
+ get
|
|
|
+ {
|
|
|
+ return AppendTags("stopexecutable");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -423,9 +434,9 @@ namespace winsw
|
|
|
startarguments += " " + descriptor.Arguments;
|
|
|
}
|
|
|
|
|
|
- EventLog.WriteEntry("Starting " + descriptor.Executable + ' ' + startarguments);
|
|
|
-
|
|
|
- StartProcess(process, startarguments);
|
|
|
+ EventLog.WriteEntry("Starting " + descriptor.Executable + ' ' + startarguments);
|
|
|
+
|
|
|
+ StartProcess(process, startarguments, descriptor.Executable);
|
|
|
|
|
|
// send stdout and stderr to its respective output file.
|
|
|
HandleLogfiles();
|
|
|
@@ -455,15 +466,22 @@ namespace winsw
|
|
|
stoparguments += " " + descriptor.Arguments;
|
|
|
|
|
|
Process stopProcess = new Process();
|
|
|
- StartProcess(stopProcess, stoparguments);
|
|
|
+ String executable = descriptor.StopExecutable;
|
|
|
+
|
|
|
+ if (executable == null)
|
|
|
+ {
|
|
|
+ executable = descriptor.Executable;
|
|
|
+ }
|
|
|
+
|
|
|
+ StartProcess(stopProcess, stoparguments, executable);
|
|
|
stopProcess.WaitForExit();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void StartProcess(Process process, string arguments)
|
|
|
+ private void StartProcess(Process process, string arguments, String executable)
|
|
|
{
|
|
|
var ps = process.StartInfo;
|
|
|
- ps.FileName = descriptor.Executable;
|
|
|
+ ps.FileName = executable;
|
|
|
ps.Arguments = arguments;
|
|
|
ps.CreateNoWindow = false;
|
|
|
ps.UseShellExecute = false;
|