Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 等待进程终止或停止,然后从服务重新启动_C#_Windows_Process_Waithandle - Fatal编程技术网

C# 等待进程终止或停止,然后从服务重新启动

C# 等待进程终止或停止,然后从服务重新启动,c#,windows,process,waithandle,C#,Windows,Process,Waithandle,在我的C#应用程序中,我有一个要求,即服务将持续监视流程。如果进程被某种方式或用户杀死或停止,则必须启动它。服务将启动/重新启动该进程。 我能够管理从一个进程启动一个exe,如果该进程被用户杀死,或者有任何机会,该服务将重新启动该进程。但我这里有个问题 我是怎么做到的 string ProcessName = "Notepad++"; String appName = @"C:\Program Files (x86)\Notepad++\Notepad++.exe"; System.Diagno

在我的C#应用程序中,我有一个要求,即服务将持续监视流程。如果进程被某种方式或用户杀死或停止,则必须启动它。服务将启动/重新启动该进程。 我能够管理从一个进程启动一个exe,如果该进程被用户杀死,或者有任何机会,该服务将重新启动该进程。但我这里有个问题

我是怎么做到的

string ProcessName = "Notepad++";
String appName = @"C:\Program Files (x86)\Notepad++\Notepad++.exe";
System.Diagnostics.Process[] proc = System.Diagnostics.
                                    Process.GetProcessesByName(ProcessName);

if (proc.Length > 0)
{
}
else
{
     // start the process
     AppLoader.PROCESS_INFORMATION procInfo;
     bool result = AppLoader.StartProcess(appName, out procInfo);
}


//Check if the process is running or not.
while (true)
{
     Int32 result2 = WaitForMultipleObjects(.....);
     System.Threading.Thread.Sleep(1000);
}
我有StartProcess中的AppLoader代码,它有一个WIn 32 API
CreateProcessAsUser

bool result = CreateProcessAsUser(hUserTokenDup,        
                                        null,                   
                                        applicationName,       
                                        ref sa,                 
                                        ref sa,                 
                                        false,                  
                                        dwCreationFlags,        
                                        IntPtr.Zero,           
                                        null,                   
                                        ref si,                 
                                        out procInfo            
                                        );
这就开始了这个过程

现在,当我的服务在第一次启动时,进程启动,但如果我终止了进程,它就不会启动,因此我知道我必须使用
WaitForMultipleObject Win32 API
,并完成它。我登录了谷歌,但没有
WaitForMultipleObject
的代码示例,有人能帮我展示
WaitForMultipleObject
的示例吗


谢谢

我看不出您的代码有什么问题(事实上,我根本看不到任何启动流程的代码),以及
WaitForMultipleObject
在这里有什么帮助?将代码张贴在
StartProcess
中。请注意,
WaitForMultipleObject
只不过是
WaitHandle.WaitAll
WaitHandle.WaitAny
方法。如何确保代码片段多次出现?请查看代码已更新,上次我忘记了放置while部分,在内部,当我需要使用WaitForMultipleObjects时,您为什么使用本机WinAPI方法而不是托管类来启动进程?为什么不注册到
进程。退出
事件?这样,您就不必阻塞和浪费任何CPU周期