mirror of https://github.com/winsw/winsw
should be while !process.WaitForExit of course
git-svn-id: https://svn.kenai.com/svn/winsw~subversion/trunk@28 c8b2a3fe-9b5b-6a51-a37e-dc31b0e308faremotes/git-svn
parent
3b4052df0d
commit
32860b8155
26
Main.cs
26
Main.cs
|
@ -477,7 +477,7 @@ namespace winsw
|
|||
string logfilename = Path.Combine(descriptor.LogDirectory, descriptor.BaseName + ".wrapper.log");
|
||||
StreamWriter log = new StreamWriter(logfilename, true);
|
||||
|
||||
log.WriteLine(message);
|
||||
log.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " - " + message);
|
||||
log.Flush();
|
||||
log.Close();
|
||||
}
|
||||
|
@ -504,6 +504,7 @@ namespace winsw
|
|||
}
|
||||
|
||||
LogEvent("Starting " + descriptor.Executable + ' ' + startarguments);
|
||||
WriteEvent("Starting " + descriptor.Executable + ' ' + startarguments);
|
||||
|
||||
StartProcess(process, startarguments, descriptor.Executable);
|
||||
|
||||
|
@ -515,6 +516,8 @@ namespace winsw
|
|||
|
||||
protected override void OnShutdown()
|
||||
{
|
||||
// WriteEvent("OnShutdown");
|
||||
|
||||
try
|
||||
{
|
||||
this.systemShuttingdown = true;
|
||||
|
@ -528,6 +531,8 @@ namespace winsw
|
|||
|
||||
protected override void OnStop()
|
||||
{
|
||||
// WriteEvent("OnStop");
|
||||
|
||||
try
|
||||
{
|
||||
StopIt();
|
||||
|
@ -542,12 +547,14 @@ namespace winsw
|
|||
{
|
||||
string stoparguments = descriptor.Stoparguments;
|
||||
LogEvent("Stopping " + descriptor.Id);
|
||||
WriteEvent("Stopping " + descriptor.Id);
|
||||
orderlyShutdown = true;
|
||||
|
||||
if (stoparguments == null)
|
||||
{
|
||||
try
|
||||
{
|
||||
WriteEvent("ProcessKill " + process.Id);
|
||||
process.Kill();
|
||||
}
|
||||
catch (InvalidOperationException)
|
||||
|
@ -569,10 +576,14 @@ namespace winsw
|
|||
|
||||
StartProcess(stopProcess, stoparguments, executable);
|
||||
|
||||
WriteEvent("WaitForProcessToExit "+process.Id+"+"+stopProcess.Id);
|
||||
WaitForProcessToExit(process);
|
||||
WaitForProcessToExit(stopProcess);
|
||||
SignalShutdownComplete();
|
||||
Console.Beep();
|
||||
}
|
||||
|
||||
WriteEvent("Finished " + descriptor.Id);
|
||||
}
|
||||
|
||||
private void WaitForProcessToExit(Process process)
|
||||
|
@ -581,18 +592,20 @@ namespace winsw
|
|||
|
||||
try
|
||||
{
|
||||
while (process.WaitForExit(1000))
|
||||
// WriteEvent("WaitForProcessToExit [start]");
|
||||
|
||||
while (!process.WaitForExit(1000))
|
||||
{
|
||||
SignalShutdownPending();
|
||||
// WriteEvent("WaitForProcessToExit [repeat]");
|
||||
}
|
||||
}
|
||||
catch (InvalidOperationException ex)
|
||||
catch (InvalidOperationException)
|
||||
{
|
||||
WriteEvent("already terminated", ex);
|
||||
// already terminated
|
||||
}
|
||||
|
||||
SignalShutdownComplete();
|
||||
// WriteEvent("WaitForProcessToExit [finished]");
|
||||
}
|
||||
|
||||
private void SignalShutdownPending()
|
||||
|
@ -600,6 +613,7 @@ namespace winsw
|
|||
IntPtr handle = this.ServiceHandle;
|
||||
wrapperServiceStatus.checkPoint++;
|
||||
wrapperServiceStatus.waitHint = 10000;
|
||||
// WriteEvent("SignalShutdownPending " + wrapperServiceStatus.checkPoint + ":" + wrapperServiceStatus.waitHint);
|
||||
wrapperServiceStatus.currentState = (int)State.SERVICE_STOP_PENDING;
|
||||
SetServiceStatus(handle, ref wrapperServiceStatus);
|
||||
}
|
||||
|
@ -608,6 +622,7 @@ namespace winsw
|
|||
{
|
||||
IntPtr handle = this.ServiceHandle;
|
||||
wrapperServiceStatus.checkPoint++;
|
||||
// WriteEvent("SignalShutdownComplete " + wrapperServiceStatus.checkPoint + ":" + wrapperServiceStatus.waitHint);
|
||||
wrapperServiceStatus.currentState = (int)State.SERVICE_STOPPED;
|
||||
SetServiceStatus(handle, ref wrapperServiceStatus);
|
||||
}
|
||||
|
@ -628,6 +643,7 @@ namespace winsw
|
|||
// ps.EnvironmentVariables[key] = envs[key]; // bugged (lower cases all variable names due to StringDictionary being used, see http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=326163)
|
||||
|
||||
process.Start();
|
||||
WriteEvent("Started " + process.Id);
|
||||
|
||||
// monitor the completion of the process
|
||||
new Thread(delegate()
|
||||
|
|
Loading…
Reference in New Issue