标签: logoff

在C#中以编程方式从Win XP注销用户

如何从C#应用程序启动Windows XP用户注销?我的应用程序的操作应该产生与在XP开始菜单中单击"注销"相同的结果 - 如果系统要求确认,则没问题.

是否有.Net或非托管API?

.net c# windows logoff

25
推荐指数
3
解决办法
1万
查看次数

从登录和注销获得通知

我必须开发一个程序,它在本地PC上作为服务运行,为服务器提供几个用户状态.一开始我必须检测用户登录注销.

我的想法是使用ManagementEventWatcher该类并查询Win32_LogonSession是否有更改的通知.

我的第一个测试运行良好,这是代码部分(这将作为服务的线程执行):

private readonly static WqlEventQuery qLgi = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance ISA \"Win32_LogonSession\"");

public EventWatcherUser() {
}

public void DoWork() {
    ManagementEventWatcher eLgiWatcher = new ManagementEventWatcher(EventWatcherUser.qLgi);
    eLgiWatcher.EventArrived += new EventArrivedEventHandler(HandleEvent);
    eLgiWatcher.Start();
}

private void HandleEvent(object sender, EventArrivedEventArgs e)
{
    ManagementBaseObject f = (ManagementBaseObject)e.NewEvent["TargetInstance"];
    using (StreamWriter fs = new StreamWriter("C:\\status.log", true))
    {
        fs.WriteLine(f.Properties["LogonId"].Value);
    }
}
Run Code Online (Sandbox Code Playgroud)

但我有一些理解问题,我不确定这是否是解决该任务的常用方法.

  1. 如果我查询Win32_LogonSession我得到几个与同一用户相关联的记录.例如,我得到这个ID 7580798和7580829,如果我查询

    ASSOCIATORS OF {Win32_LogonSession.LogonId = X} WHERE …

c# authentication events logoff

21
推荐指数
3
解决办法
2万
查看次数

从服务注销Windows中的交互式用户

我正试图找出一种方法来从使用C#编写的Windows服务注销本地Windows会话中的用户.

以下是问题的背景:我需要管理一组用户的计算机使用时间; 当他们的分配时间到期时,我想将其注销.这是在W2K8域的上下文中.不幸的是,Windows中的登录时间控件只是将用户与服务器资源断开连接; 没有办法强制他们的会话通过这种方法终止.

我的方法是构建一个我将在域中部署的Windows服务; 该服务将在每台客户端计算机上运行.服务将定期枚举计算机上的已登录用户,呼叫数据库以将自上次呼叫以来的登录时间添加到当天的总计中,如果已达到最大值,则将其注销(五分钟警告).注意 - 这些不是终端服务会话,它们是常规的本地交互式登录.另请注意,由于Win7和Vista中的"切换用户"功能,计算机上可能有多个登录.我的所有客户端PC都将运行Win7.Windows服务将作为本地系统运行,因此权限不应成为问题.

我可以使用WMI通过用户名在计算机上成功构建登录用户列表.这是该代码的片段:


        List<string> loggedInUsers = new List<string>();
        ManagementClass mc = new ManagementClass("Win32_Process");
        ManagementObjectCollection moc = mc.GetInstances();

        foreach (ManagementObject mo in moc)
        {
            ROOT.CIMV2.Process process = new ROOT.CIMV2.Process(mo);
            string domain, user;
            uint pid;
            process.GetOwner(out domain, out user);
            pid = process.ProcessId;
            if (process.Name.Trim().ToLower() == "explorer.exe")
                loggedInUsers.Add(user);
        }
        return loggedInUsers;
Run Code Online (Sandbox Code Playgroud)

但是,我正在努力寻找一种方法,允许我注销所选用户的会话.我知道我可以关闭机器,但我不希望这样 - 这会杀死所有用户的会话.

任何人的想法?感谢您阅读这篇冗长的帖子!

c# windows-services logoff

12
推荐指数
1
解决办法
1万
查看次数

使用java注销计算机

如何使用java注销Windows.它可能是通过Runtime()或其他方法使用一些Windows自己的exe.如果你能提供一些比使用nircmd.exe这样的外部程序更好的选择会更有效.

当我使用此代码时,

String shutdownCmd = "rundll32.exe shell32.dll,SHExitWindowsEx 0";
Process child = Runtime.getRuntime().exec(shutdownCmd);
Run Code Online (Sandbox Code Playgroud)

我明白了

错误味精

java windows logging logoff

8
推荐指数
1
解决办法
3706
查看次数

添加注销脚本

我有一些脚本,我希望每次用户注销时运行.我想创建一些以编程方式设置注销脚本的东西.例如,可以执行exe或cmd文件以将注销脚本添加到Windows执行的注销脚本列表中.因此,Windows API函数或Windows shell命令将更可取,但我找不到这样的函数或命令来帮助解决这个问题.

我检查了本地组策略编辑器在您使用它向组策略添加注销脚本时所做的注册表编辑,但是它确实做了很多我不能确定的模仿.例如,它进行了大量的注册表编辑,并且它在某些注册表项中使用数字代码,在某些值中使用二进制数据.我不知道这些值代表什么.

我已经尝试了GPEdit所做的更改的子集,希望这样做仍然可行.例如,我将对HKCU\Software\Policies\Microsoft\Windows\System\Scripts\Logoff所做的更改导出并导入到另一台PC上,但这不起作用,并且GPEdit MMC没有意识到我甚至已经制作了更改.

正如我所说,一组Windows API函数或Windows shell命令将是更好的,如果有人知道一些可能有帮助,但如果有人知道一种方法解码GPEdit以我可以模拟的方式制作的信息堆然后,只要它们稳定,我就不反对进行注册表更改.

无论我找到和使用什么解决方案,它都必须能够自动可靠,因为它将通过psexec远程执行到许多计算机上,并且它也将被包含在自动设置过程中,用于未来设置的PC.

不幸的是,对于谷歌而言,这似乎是一个难题,因为人们试图做的许多其他事情都有许多我要查询的关键词,但实际上并不是同一个主题.例如,关闭/注销挂钩用于运行应用程序或远程注销用户.

如果有人是Windows注册表或MMC向导,并且认为看到注册表的转储更改了GPEdit MMC在做同样的事情时会有所帮助那么就这么说了,我会让它可用,因为我已经捕获它.我怀疑这是要走的路,但我已经开始研究如何创建MMC管理单元工具; 我的想法是,也许GPEdit管理单元本身可以进行逆向工程,这样我就能以一种简单的方式看到它正在做什么.这不会快到任何地方,因为我看到的.adm文件中没有一个看起来有这样的设置,并且gpedit.msc文件似乎没有任何可以在明文部分中提供它的东西,尽管那里是一个看起来像胡言乱语的部分,所以也许那里有某种魔法.

windows winapi scheduled-tasks logoff windows-scripting

5
推荐指数
1
解决办法
1万
查看次数

如何在DNN 5.x中注销工作?

我们看到的一个问题是会话没有被DNN放弃.我不确定这是否是一个4.5.x问题,因为我们之前升级到5.x并且可能引用了较旧的控件.

我们在模块中引用的登录/注销控件是位于路径DNN_Web_Root/admin/Skins/login.ascx中的DotNetNuke.UI.Skins.Controls.Login

在那里它看起来像是重定向到logoff.aspx然后通过LogoffHttpHandler,然后它去某处完成注销过程但是我找不到该过程在哪里查看是否正在调用Session.Abandon.

有人可以回答以下问题:

  • DNN是否存在Session.Abandon未在Logoff上调用的问题?
  • 实际处理LogOff进程的过程是什么?

session dotnetnuke logoff

5
推荐指数
1
解决办法
3146
查看次数

使用 Python 注销 Windows

我应该使用哪个 Python 函数来注销当前用户。我找到了一个锁定我的电脑的示例,例如 Win+L 组合

ctypes.windll.user32.LockWorkStation ()

但我需要一个类似的功能,它将注销。

python logoff logout

5
推荐指数
1
解决办法
9535
查看次数

Windows 中使用 Win32_NTLogEvent 类的相关登录和注销事件

我正在尝试从Win32_NTLogEvent类获取登录和注销事件。为此,我使用了以下 WMI 查询:

PATH Win32_NTLogEvent WHERE "(EventIdentifier = 4648 OR EventIdentifier = 4647 OR EventIdentifier = 4634) And TimeGenerated > '201811010000'" GET /ALL
Run Code Online (Sandbox Code Playgroud)

查询工作正常,并为我带来了所有相关的登录和注销的响应。问题是:我如何将这两个事件联系起来?我的意思是,如何将哪个注销与某个登录事件相关联?

分析事件4648(登录尝试)和4634(帐户已注销)的(不太清楚)文档,看起来两者都有一个链接的 ID,考虑SubjectLogonId4648 事件和TargetLogonId4634 事件。

考虑到这些信息,我正在解析返回的事件,从 InsertionStrings 获取 Id 并尝试找到链接的 ID,但我没有找到任何。

是我误解了什么还是我正在寻找错误的信息?

我在 Windows 10 和 Windows Server 2012 中对其进行了测试,但我正在寻找可以在尽可能多的版本中使用的东西。

一些背景:

简而言之,我想知道某些特定日期的登录/注销时间和会话持续时间。我能够使用以下 WMI 查询(Win32_NetworkLoginProfile类)获取特定用户的登录和注销时间:

PATH Win32_NetworkLoginProfile WHERE "Name='DOMAIN\\user'" GET LastLogon, LastLogoff

我对第一个查询的意图几乎相同,但我想要所有用户的信息而不知道每个用户名。我最好的猜测是使用所描述的 Win32_NTLogEvent 类,但这不是强制性的。

windows wmi events login logoff

5
推荐指数
1
解决办法
822
查看次数

节省用户登录的时间

在我正在开发的应用程序中,我必须存储一些特定用户保持登录到应用程序的时间,不幸的是,在Web应用程序中,用户可以通过多种方式注销.

  1. 用户单击注销.
  2. 用户会话到期.
  3. 用户关闭窗口.
  4. 用户在地址栏中键入另一个站点URL.

第一个很容易,因为应用程序可以控制注销过程.但在其他方面,它变得棘手.

你会怎么做才能解决这个问题?

javascript time frontend logoff

4
推荐指数
1
解决办法
291
查看次数

C#Windows应用程序阻止Windows关闭/注销

我编写了一个C#Windows窗体应用程序,而不是一个服务(它仅在用户登录并具有图形用户界面时使用),后台线程在无限循环中运行.

然而,当我尝试关闭Windows(7)时,它告诉我程序阻止它关闭或注销,并询问我是否要强制关闭.

现在,我的程序是否有可能意识到(获取处理程序)Windows尝试退出或注销?

所以,我需要的是在Windows尝试退出时使应用程序实现.

提前致谢.

编辑:谢谢你的好建议!如果它有一个CANCEL事件处理程序,它是否可以以任何方式使用表单结束事件?

c# windows logoff handler

4
推荐指数
2
解决办法
3672
查看次数