c# windows服务中启动进程

来源:互联网 发布:送男朋友什么礼物知乎 编辑:程序博客网 时间:2024/06/14 18:35
现在需要在一个windows服务中判断程序是否运行,如果不在运行,就要重启这个进程,


尝试了Process的方法:

Process pro = new Process();            string batPath = "D:\\run.bat";            FileInfo file = new FileInfo(batPath);            pro.StartInfo.WorkingDirectory = file.Directory.FullName;            pro.StartInfo.FileName = batPath;            pro.StartInfo.CreateNoWindow = false;            pro.Start();

和StartAppUtil的方法:

StartAppUtil.StartApplication(@"D:\test.ext");

发现都有问题。


在网上找到了一个 Cjwdev.WindowsApi 的方法很好用,
首先下载 Cjwdev.WindowsApi.dll ,引入到项目中,

try            {               string appStartPath = filePath;               IntPtr userTokenHandle = IntPtr.Zero;                ApiDefinitions.WTSQueryUserToken(ApiDefinitions.WTSGetActiveConsoleSessionId(), ref userTokenHandle);               ApiDefinitions.PROCESS_INFORMATION procInfo = new ApiDefinitions.PROCESS_INFORMATION();                ApiDefinitions.STARTUPINFO startInfo = new ApiDefinitions.STARTUPINFO();                startInfo.cb = (uint)Marshal.SizeOf(startInfo);               ApiDefinitions.CreateProcessAsUser(                    userTokenHandle,                    appStartPath,                    "",                    IntPtr.Zero,                    IntPtr.Zero,                    false,                    0,                    IntPtr.Zero,                    null,                    ref startInfo,                    out procInfo);               if (userTokenHandle != IntPtr.Zero)                   ApiDefinitions.CloseHandle(userTokenHandle);               int _currentAquariusProcessId = (int)procInfo.dwProcessId;            }            catch (Exception ex)            {            }

传入进程的执行文件filePath 就可以启动这个进程了。



0 0
原创粉丝点击