我正在尝试创建一个监视和更新应用程序(winform)的Windows服务,如果它停止或者它没有运行应该启动它。但它应该作为当前的控制台用户运行应用程序。 我的问题是它使用网络服务凭证启动表单,因此它对当前用户不可用。
protected override void OnStart(string[] args)
{
if (!GetProcessList())
{
Process p = new Process();
p.EnableRaisingEvents = true;
p.Exited += new EventHandler(p_Exited);
StartProcces();
}
else
{
eventLog1.WriteEntry("Process is running");
}
}
void p_Exited(object sender, EventArgs e)
{
StartProcces();
}
static void StartProcces()
{
System.Diagnostics.ProcessStartInfo myProcess = new System.Diagnostics.ProcessStartInfo(@Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) + "\\WmiMonClient.exe");
myProcess.WorkingDirectory = System.Reflection.Assembly.GetEntryAssembly().Location;
//set environment path
try
{
System.Diagnostics.Process.Start(myProcess);
}
catch (Exception ex)
{
}
}
private static bool GetProcessList()
{
bool proccesIsRunning = false;
Process[] processlist = Process.GetProcesses();
foreach (Process theprocess in processlist)
{
if (theprocess.ProcessName == "WmiMonClient.exe")
{
proccesIsRunning = true;
}
}
return proccesIsRunning;
}
protected override void OnStop()
{
}
答案 0 :(得分:0)
攻击此方法的一种方法可能是创建一个执行上述代码的计划任务(使用Windows计划程序)。如果是,它只是再次启动它。
这具有已经运行用户上下文的优点,而不必从Windows服务中考虑它。