现在需要在一个windows服务中判断程序是否运行,如果不在运行,就要重启这个进程,
和StartAppUtil的方法:
传入进程的执行文件filePath 就可以启动这个进程了。
尝试了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 就可以启动这个进程了。