Windows 10 个分配的访问权限:如何以编程方式注销
Windows 10 assigned access: how to logout programmatically
我在分配的访问权限(Windows 10 的 Kiosk 模式)下后台有控制台应用程序 运行。通过来自主 UWP-app 的命令,它应该注销当前用户。我已经尝试了两种方法来做到这一点:
- WinAPI 函数
ExitWindowsEx(0, 0)
Process.Start("shutdown /l /f")
如果当前用户有密码,两者都可以正常工作。但如果用户没有密码,注销后Windows会立即重新登录。有没有办法避免重新登录?
更新:
看起来 LockWorkStation
也不起作用。可能是出于安全原因?
试试这个
注销当前用户。
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;
}
根据 Raymond Chen from Microsoft 这是不可能的:
UWP applications cannot sign users out or lock the workstation. That
would result in a denial of service from an app that just locked the
workstation in a tight loop.
在您的 Client/Server 中,UWP 应用程序向桌面应用程序发送请求,方法尝试 WTSDisconnectSession() call in the desktop application, as suggested here。
非常感谢@magicandre1981 在评论中的解答。他的回答:
try this call instead of ExitWindows
这对我有用。
我实际上是在 msdn
上找到的
它解释了如何退出分配的访问权限。
从当前视图获取 LockApplicationHost。如果 host 为 null,则该应用程序不会 运行 在分配的访问权限下,因此它已正常启动。然后调用 RequestUnlock() 并显示登录屏幕,您可以使用不同的用户登录。
Windows.ApplicationModel.LockScreen.LockApplicationHost lockHost = Windows.ApplicationModel.LockScreen.LockApplicationHost.GetForCurrentView();
if (lockHost != null)
{
lockHost.RequestUnlock();
}
我在分配的访问权限(Windows 10 的 Kiosk 模式)下后台有控制台应用程序 运行。通过来自主 UWP-app 的命令,它应该注销当前用户。我已经尝试了两种方法来做到这一点:
- WinAPI 函数
ExitWindowsEx(0, 0)
Process.Start("shutdown /l /f")
如果当前用户有密码,两者都可以正常工作。但如果用户没有密码,注销后Windows会立即重新登录。有没有办法避免重新登录?
更新:
看起来 LockWorkStation
也不起作用。可能是出于安全原因?
试试这个
注销当前用户。
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;
}
根据 Raymond Chen from Microsoft 这是不可能的:
UWP applications cannot sign users out or lock the workstation. That would result in a denial of service from an app that just locked the workstation in a tight loop.
在您的 Client/Server 中,UWP 应用程序向桌面应用程序发送请求,方法尝试 WTSDisconnectSession() call in the desktop application, as suggested here。
非常感谢@magicandre1981 在评论中的解答。他的回答:
try this call instead of ExitWindows
这对我有用。
我实际上是在 msdn
上找到的它解释了如何退出分配的访问权限。 从当前视图获取 LockApplicationHost。如果 host 为 null,则该应用程序不会 运行 在分配的访问权限下,因此它已正常启动。然后调用 RequestUnlock() 并显示登录屏幕,您可以使用不同的用户登录。
Windows.ApplicationModel.LockScreen.LockApplicationHost lockHost = Windows.ApplicationModel.LockScreen.LockApplicationHost.GetForCurrentView();
if (lockHost != null)
{
lockHost.RequestUnlock();
}