0

在用户登录时,我在 C# 中使用 CreateProcessWithLogonW 以管理员身份启动进程。

当用户现在注销时,程序并没有关闭。

我希望它在使用 CreateProcessWithLogonW 启动它的用户注销时关闭。我怎么做?

我无法让执行 CreateProcessWithLogonW 的进程保持运行,因此以管理员身份启动的程序必须杀死自己。

4

2 回答 2

0

如果发出 CreateProcessWithLogonW 的应用程序仍在运行,您可以检测 Windows 何时开始注销并关闭子应用程序。例如使用SystemEvents.SessionEnding 事件

于 2012-06-21T22:54:40.410 回答
0

我通过使用http://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.aspx示例 2中描述的 HiddenForm 解决了这个问题。
这最初用于 Windows 服务,但也适用于 Windows-Forms 应用程序没有图形用户界面。在没有 GUI 的应用程序(还有控制台应用程序、Windows 服务)中没有收到 SessionEnding 事件的原因是它是通过仅分配给每个打开的窗口(基本上)的 Windows 消息泵发送的。

有关 Windows 消息的更多信息,请阅读本文:http: //msdn.microsoft.com/en-us/library/windows/desktop/ms644927%28v=vs.85%29.aspx

要使这个示例真正不可见(在 xp 中),您还需要

this.ShowInTaskbar = false;
this.WindowState = FormWindowState.Minimized;
this.Visible = false;

在 HiddenForm.InitializeComponent() 中。

于 2012-06-23T11:23:10.770 回答