c# - 有什么方法可以知道 CreateProcessAsUser 的进程何时从 C# 退出?

标签 c# .net service createprocessasuser

我目前正在使用 C# 中的 P/Invoke 来玩 CreateProcessAsUser,以便从在 SYSTEM 帐户中运行的 Windows 服务作为受限用户启动进程。

我的目标是拥有一个启动应用程序的服务,该应用程序需要从我们办公室的用户那里获取信息(在前台运行的进程、空闲时间等)。问题是,如果这个应用程序以用户的权限运行……好吧,他可以关闭它。如果像另一个应用程序的常规进程一样运行,我可以通过以下方式控制此重生:

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = ExePath;
psi.UseShellExecute = false;

Process p = new Process();
p.StartInfo = psi;
p.EnableRaisingEvents = true;
p.Exited += new EventHandler(LaunchAgain);
p.Start();

但是这样一来,我的问题是我有两个用户可关闭的应用程序,而不是一个用户无法重生的应用程序(好吧,但其中一个会重生另一个:P) .

你知道吗,有一些方法可以知道一个进程是否由 CreateProcessAsUser 创建可以被“监视”以在它被杀死或终止时启动一些 Action 吗?

PD:当然,不建议任何类型的改进或不同的方法。

最佳答案

两件事 - CreateProcessAsUser 有一个参数 lpProcessInformation 接收关于新进程的数据。然后您可以等待进程句柄。或者您可以通过 Process.GetProcessById(...) 创建一个 C# 进程类,并像上面的代码片段一样使用它。

OTOH,直接从您的服务中执行功能(收集信息 - 如果我理解正确的话)可能会更简单。

关于c# - 有什么方法可以知道 CreateProcessAsUser 的进程何时从 C# 退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16731913/

相关文章:

c# - 如何使用C#中的存储过程在Oracle数据库中插入数据?

c# - 使用c#从excel文件中删除行

c# - 使用事件处理程序与覆盖事件触发方法

c# - 为什么 GC 在 LINQ 查询后释放 WhereListIterator 而不是表示条件的函数?

android - 即使我的应用程序未打开,当用户启用 wifi 时,我该如何做某事(比如开始我的第二项 Activity )?

java - Android 服务在 OPPO 小米 MIUI vivio 等某些设备上停止工作

c# - LINQ to SQL 查询未返回正确的日期时间

c# - 是否可以解决 .Net 3.5 中的 "Default parameter specifiers are not permitted"错误?

c# - ASP NET API - 使用 Azure AD SAML 协议(protocol)对用户进行身份验证,无需打开 Microsoft 登录页面

android防弹toast方法