【问题标题】:log off a specific user with C# for Windows 7 Home Premium?使用 C# for Windows 7 Home Premium 注销特定用户?
【发布时间】:2011-11-09 13:17:02
【问题描述】:

我可以调用 .Net API 或 DLL 在 Windows 7 中注销另一个用户吗?

已经有几个关于 SO 的问题,但它们似乎是特定于 Windows XP 的。尽管如此,我已经尝试过它们,但无法让它们工作。

比如这个one和这个one

这在 Windows 7 中是不可能的吗?还是我应该调用其他 API?

【问题讨论】:

    标签: c# .net windows-7


    【解决方案1】:

    你试过这个功能吗?您必须先列出会话信息:

    [DllImport("wtsapi32.dll", SetLastError = true)]
        static extern bool WTSLogoffSession(IntPtr hServer, int SessionId, bool bWait);
    

    【讨论】:

    • 如何列出会话信息?
    • 您必须使用 EnumerateSessions 函数,它在 pinvoke.net 上的 wtsapi32.dll 下都有很好的记录。 pinvoke.net/default.aspx/wtsapi32.WTSLogoffSession我试图粘贴一个样本,但它不会给我足够的空间。
    • 这不是我没见过的东西。我试过了,代码似乎在 Windows 7 中无法运行。您是否能够让它在 Windows 7 中运行?
    • 这就是我在具有基本相同内核的 Server 2008 R2 和 Server 2003 上使用的。我用它来注销控制台会话,这本质上是 Windows 7 主会话。您甚至可能不需要枚举会话,只需执行一个 OpenServer 即可将 IntPtr 提供给服务器,然后 LogoffSession 使用 0 作为会话 ID。会话 0 应该始终是控制台。
    • 我不知道,我试过这个,但似乎不起作用。我开始认为是 Windows 版本阻止了我这样做。
    【解决方案2】:

    您是否关闭了 FastUserSwitching?我注意到如果它关闭,您不能通过尝试登录(即使以管理员身份)来强制某人注销。如果它关闭,请尝试将其打开并查看您的程序是否有效。

    【讨论】:

    • 感谢您的建议,但我还没有任何代码 - 这就是我所要求的。我已经尝试了我提供的链接中的项目,但它们似乎不起作用。
    • 如果关闭快速用户切换,Windows 7(至少在我的环境中)会非常保护用户会话。注销某人的唯一方法是按住电源按钮直到它关闭:O。您是否开启了快速用户切换功能?
    • 是的,我想是的。我想它需要一个注册表黑客来改变它:(见here
    【解决方案3】:

    如果一切都失败了,你可以调用 logoff.exe http://ss64.com/nt/logoff.html

    但我同意这似乎是一个肮脏的快速修复

    【讨论】:

    • 这与我发出的第二个链接有何不同?
    • 我认为注销在 Windows 7 中不起作用。我明白了:'logoff' is not recognized as an internal or external command, operable program or batch file.
    • @javamoney79 - 很奇怪;我也在使用 Windows 7 (x64)。当我转到“C:\Windows\System32”时,我确实有一个文件 logoff.exe,上面写着“会话注销实用程序”。
    • Windows 7 家庭高级版没有它。我打赌你有 Ultimate 或其他东西......
    猜你喜欢
    • 2012-07-01
    • 2013-01-06
    • 2014-08-08
    • 2016-08-22
    • 2012-06-21
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    相关资源
    最近更新 更多