83 lines
2.3 KiB
C#
83 lines
2.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using UAF.WPF.Models;
|
|
using UAF.Application.Models;
|
|
using System.Windows;
|
|
using System.Diagnostics;
|
|
|
|
namespace Monolith.Models
|
|
{
|
|
public class HostedProcessModel : ToolViewModel
|
|
{
|
|
private string m_processFullPath;
|
|
private Process m_hostedProcess;
|
|
private List<object> m_registeredViews = new List<object>();
|
|
|
|
public HostedProcessModel(string processFullPath, string windowName)
|
|
: base(windowName)
|
|
{
|
|
m_processFullPath = processFullPath;
|
|
ContentId = ToolContentId;
|
|
}
|
|
|
|
public override string ToolContentId { get { return "HostedProcessTool/" + Title; } }
|
|
|
|
public override bool InitToolModel()
|
|
{
|
|
ProcessStartInfo psi = new ProcessStartInfo(m_processFullPath);
|
|
psi.WindowStyle = ProcessWindowStyle.Minimized;
|
|
m_hostedProcess = Process.Start(psi);
|
|
m_hostedProcess.WaitForInputIdle();
|
|
|
|
return base.InitToolModel();
|
|
}
|
|
|
|
public override void DestroyToolModel()
|
|
{
|
|
// FIXME : Fix resource leak before.
|
|
//if (m_registeredViews.Count > 0)
|
|
// throw new InvalidOperationException("Destruction model was requested, but the hosted process is still under use. ");
|
|
|
|
m_hostedProcess.CloseMainWindow();
|
|
|
|
m_hostedProcess.WaitForExit(5000);
|
|
|
|
if (m_hostedProcess.HasExited == false)
|
|
{
|
|
m_hostedProcess.Kill();
|
|
}
|
|
|
|
m_hostedProcess.Close();
|
|
m_hostedProcess.Dispose();
|
|
m_hostedProcess = null;
|
|
|
|
base.DestroyToolModel();
|
|
}
|
|
|
|
public string ProcessFullPath
|
|
{
|
|
get { return m_processFullPath; }
|
|
set
|
|
{
|
|
if (m_processFullPath != value)
|
|
{
|
|
m_processFullPath = value;
|
|
RaisePropertyChanged("ProcessFullPath");
|
|
}
|
|
}
|
|
}
|
|
|
|
public Process RequestProcessHandle(object requester)
|
|
{
|
|
m_registeredViews.Add(requester);
|
|
return m_hostedProcess;
|
|
}
|
|
|
|
public void DisposeProcessHandle(object requester)
|
|
{
|
|
m_registeredViews.Remove(requester);
|
|
}
|
|
}
|
|
}
|