首页 文章

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

提问于
浏览
1

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

  • WinAPI函数 ExitWindowsEx(0, 0)

  • Process.Start("shutdown /l /f")

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

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

4 回答

  • 0

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

    UWP应用程序无法签出用户或锁定工作站 . 这将导致应用程序拒绝服务,只是将工作站锁定在一个紧密的循环中 .

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

  • 2

    Try this

    Log off the current user.

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

    With User Interaction

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

    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; 
    }
    
  • 0

    感谢您与@ magicandre1981的匹配,以获得评论中的答案 . 他的回答是:

    尝试此调用而不是ExitWindows

    这适合我 .

  • 0

    我实际上发现这个msdn

    它解释了如何退出分配的访问权限 . 从当前视图获取LockApplicationHost . 如果host为null,则应用程序不会在指定的访问权限下运行,因此它已正常启动 . 然后调用RequestUnlock()并显示登录屏幕,您可以使用不同的用户登录 .

    Windows.ApplicationModel.LockScreen.LockApplicationHost lockHost = Windows.ApplicationModel.LockScreen.LockApplicationHost.GetForCurrentView();
    
    if (lockHost != null)
    {
        lockHost.RequestUnlock();
    }
    

相关问题