Windows 10分配了访问权限:如何以编程方式注销

时间:2017-12-14 14:09:43

标签: uwp windows-10 kiosk-mode

我在分配的访问权限(Windows 10的Kiosk模式)下有后台运行的控制台应用程序。通过主UWP-app的命令,它应该注销当前用户。我尝试了两种方法:

  • WinAPI函数ExitWindowsEx(0, 0)
  • Process.Start("shutdown /l /f")

如果当前用户有密码,两者都很有效。但如果用户没有密码,Windows会在注销后立即重新登录。有没有办法避免重新登录?

更新: 看起来LockWorkStation也不起作用。可能是出于安全考虑?

4 个答案:

答案 0 :(得分:2)

根据Raymond Chen from Microsoft,这是不可能的:

  

UWP应用程序无法签出用户或锁定工作站。那   会导致从刚刚锁定的应用程序拒绝服务   工作站紧凑。

在您的客户端/服务器中,UWP应用程序向桌面应用程序发送请求,请尝试WTSDisconnectSession()在桌面应用程序中调用suggested here

答案 1 :(得分:0)

试试这个

注销当前用户。

ExitWindows(0, 0);
ExitWindowsEx(EWX_LOGOFF, 0);

使用用户互动

应用程序收到 WM_QUERYENDSESSION 消息并显示一个对话框,询问是否可以结束会话。如果用户单击,系统将注销该用户。如果用户点击,则会取消注销。

case WM_QUERYENDSESSION:  
{ 
    int r; 
    r = MessageBox(NULL,(LPCWSTR)L"End the session?",(LPCWSTR)L"WM_QUERYENDSESSION",MB_YESNO);

    // Return TRUE to continue, FALSE to stop. 

    return r == IDYES; 
    break; 
}

答案 2 :(得分:0)

感谢您与@ magicandre1981的匹配,以便在评论中回答。他的回答是:

  

try this调用而不是ExitWindows

这适合我。

答案 3 :(得分:0)

我实际上是在msdn

上找到的

它说明了如何退出分配的访问权限。 从当前视图获取LockApplicationHost。如果host为null,则该应用不会在分配的访问权限下运行,因此已正常启动。然后调用RequestUnlock(),显示登录屏幕,您可以使用其他用户登录。

Windows.ApplicationModel.LockScreen.LockApplicationHost lockHost = Windows.ApplicationModel.LockScreen.LockApplicationHost.GetForCurrentView();

if (lockHost != null)
{
    lockHost.RequestUnlock();
}