使用c#在本地注销Windows用户

我目前正在研究一些家长控制软件。 该软件应该注销一个用户,然后locking该帐户,以便他们不能重新login,除非父母/pipe理员已经指定他们可以。

到目前为止,我已经尝试了几件事情,例如在用户帐户上设置标志,说它被禁用。 这完全从login屏幕中删除它。 从我发现的是,如果用户帐户login,它不应用ADS_Disable标志。 我也尝试寻找注销另一个帐户的资源,但我似乎只能find有关注销正在运行注销命令的帐户的信息。 如Pinvoke ,或直接调用LOGOUT.EXE程序。

我在LSAUser上find一个资源,发现那里可能有些东西。 我正在为学校做这个项目,我需要一点指导。 既然有这样的信息稀less,有没有更好的办法做我想做的事情? 还是有一个原因,我不应该这样做? 任何替代品?

Solutions Collecting From Web of "使用c#在本地注销Windows用户"

使用WTSDisconnectSession() Windows API。 在这里看到文章。

 using System; using System.Runtime.InteropServices; using System.ComponentModel; class Program { [DllImport("wtsapi32.dll", SetLastError = true)] static extern bool WTSDisconnectSession(IntPtr hserver, int sessionId, bool bWait); const int WTS_CURRENT_SESSION = -1; static readonly IntPtr WTS_CURRENT_SERVER_HANDLE = IntPtr.Zero; static void Main(string[] args) { if (!WTSDisconnectSession(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, false)) throw new Win32Exception(); } } 

即使没有远程桌面,也会断开当前用户并进入登录界面。 这些进程仍然会在后台运行。 再次手动登录后,正在运行的程序将显示为断开连接之前的状态。

  [DllImport("wtsapi32.dll", SetLastError = true)] static extern bool WTSDisconnectSession(IntPtr hserver, int sessionId, bool bWait); 

在远程桌面中使用WTSDisconnectSession时 ,相当于“关闭”远程桌面窗口。 这是断开你的Windows会话,但保持连接。

优点是您可以通过远程登录再次重新连接会话。
缺点是当远程桌面连接已满时,Windows可能无法由其他用户登录。

要模拟Windows的“注销”,应在User32.dll下使用ExitWindowsEx

 [DllImport("user32.dll", SetLastError = true)] static extern bool ExitWindowsEx(uint uFlags, uint dwReason); public static bool WindowsLogOff() { return ExitWindowsEx(0, 0); } 

捎带冷玮生的回答(因为我不能评论),如果你想强制用户注销,你需要添加这样的EWX_FORCE标志:

 ExitWindowsEx(0 | 0x00000004, 0); 

有关此功能的更多详细信息,请访问: https : //msdn.microsoft.com/en-us/library/windows/desktop/aa376868(v=vs.85).aspx