我寻找的 “RunOnceEx” 逆版本。

RunOnceEx并在用户的壳(桌面和任务栏)开始之前运行一些程序。登录进程将不会继续在runonceex完成之前。

我想要做的确切相同的,但在用户注销。 当她/他注销,所有正在运行的程序关闭,留下外壳(桌面和任务栏),然后点“”我希望我的程序将执行这一时刻“”,最后退出。

我认为这是可能的,因为“mobsync.exe”正在这样做。但我找不到在哪里以及如何做到这一点。

有帮助吗?

解决方案

要只为当前用户运行此,你可以使用WMI当关闭/退出时获得的信息。

要么你写一个小C#(或者可以使用WMI任何其他语言)应用程序或VBS脚本来侦听的 Win32_ComputerShutdownEvent 的WMI事件。

这是实施例C#应用程序可以在这里找到在这样一个问题:获得从注销事件系统

其他提示

警告作为所述这里 gpedit.msc将允许您配置注销脚本作为的所有的用户

如果您需要的脚本只有一个用户,则需要在注册表中直接宣告它,无论是在HKCUHKLM

在第一个结果发现在谷歌为我

要执行,你可以创建一个脚本来运行它,并使用组策略来强制执行的程序。 在组策略编辑器导航到用户配置 - > Windows设置 - >脚本(登录/注销)

这里

更多信息

如果要运行的程序,以注销执行代码,则应该钩住WM_QUERYENDSESSION消息,并寻找lParam(为0x80000000)的ENDSESSION_LOGOFF值。

即在你的代码,甚至允许运行过程可能会被杀死 -

因为其他的人表示“强制关闭”重要的是要测试这个lParam值。事实上,大多数关机/会话结束消息只是为了让你跑最后一分钟的清理代码的机会,是不是安全的,并具有长期运行的行动作出回应;但是这种特定组合应该确定。

注意:我从来没有尝试实际响应于WM_QUERYENDSESSION消息运行一个单独的过程。这可能是因为窗口管理器将不允许这样,关闭期间喜欢它。试试看,我猜。

如果你在.NET环境中(没有指定),更快捷的方法是将事件处理程序添加到Microsoft.Win32.SystemEvents.SessionEnding事件。

您需要的是 GINA <实现/ A>。您可以在 WlxIsLogoffOk 运行自定义命令函数,该函数被调用时用户启动注销

一旦你创建正确的dll的GINA你可以在这里注册:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\@GinaDLL

下面是可满足您的需求(它提供了在那里你可以指定你的命令注销注册表项)的实现: http://wwwthep.physik.uni-mainz.de/~弗林克/ newgina_pre09 / readme.html文件

作为VonC和TFD已经提到的,组策略编辑器是另一种操纵注册表。

只是要与gpedit的变化(USERCONFIG - Windows设置 - 脚本),你喜欢和事后采取在[HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System\Scripts]注册表看看 找出你怎么可以直接做到这一点。

另外我的PC上(域中挂)是隐藏文件夹C:\WINDOWS\System32\GroupPolicy与子文件夹的用户和机器。两者都具有所谓的关机和开机其他子文件夹。也许你也可以使用这些的。

如果您需要单个(或任何)简单的东西和工作的用户就可以使在C ++或C#例如简单的应用程序。

最简单的是具有一个托盘C#(通过简单地将托盘组件的形式)和在的FormClosing 事件寄存器和事件处理程序。它会是这样的:

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (e.CloseReason != CloseReason.UserClosing)
        {
            // It's not the user closing the application,
            // Let's do whatever you want here, for example starting a process
            Process notePad = new Process();

            notePad.StartInfo.FileName   = "notepad.exe";
            notePad.StartInfo.Arguments = "ProcessStart.cs";

            notePad.Start();
        }
    }

所以,你的应用程序将与Windows或与用户启动。它会等待(使用的记忆一点点),当系统关闭时会做什么,或者用户注销等(通过检查上面的“CloseReason”)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top