微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Windows 登录之前将 UWP 应用程序作为系统启动

如何解决在 Windows 登录之前将 UWP 应用程序作为系统启动

用例

目前我正在开发一个 Windows 登录提供程序,它使用一个 Windows 通用应用程序 (UWP) 能够使用工作站的网络摄像头捕获自拍照。此用例由两个部分组成:

  1. Windows 登录提供程序: 该组件是一个Windows ICredentialProvider 对话的 COM 对象。这个组件给了我无限的 在登录之前与用户交互的可能性。主要 目标是要求提供有关用户的其他身份详细信息。
  2. 网络摄像头 UWP: 这是一个 Windows 通用应用程序 (UWP),它显示 笔记本电脑上网络摄像头的实时视图,并且能够控制拍照 由用户。我将 UWP 配置为以 Declaritive URI 开头。有了这个,我们可以使用 Windows Run 启动应用程序。

目标

此用例的目标是在 Windows 登录阶段启动网络摄像头 UWP 应用程序。因此,当用户启动笔记本电脑并使用我的凭据提供程序提示输入凭据时,会启动一个额外的网络摄像头应用程序来拍摄人像照片。


问题

我遇到的主要问题是我无法在 Windows 登录屏幕期间启动网络摄像头应用程序。在开发过程中,我可以使用 CredUI 测试我的凭据提供程序(CredUIPromptForWindowsCredentials 函数创建并显示一个可配置的对话框,允许用户使用安装在本地计算机上的任何凭据提供程序来提供凭据信息),通过这个我可以测试我的凭据提供程序并启动网络摄像头 UWP 应用程序。这工作成功,我想在 Windows 登录期间获得相同的结果,但不幸的是它没有。我认为有两种可能会导致负面结果:

1.在 Windows 登录期间启动 UWP 应用程序的权限不足

注意:在我的 CredentialProvider 中,使用 Process Class 启动我的程序:

Process.Start("<application name>");

Windows UWP 应用程序代码签名由多个 categories 组成。我使用自签名证书使用 Visual Studio 签署了我的 UWP 应用程序。此代码签名的结果是我的 UWP 应用使用 SignatureKind: Developer 进行了签名。您可以在下面的 Powershell GetAppPackage 屏幕截图中看到: Details Custom UWP application

在我的测试中,我发现在 Windows 登录期间 UWP 无法启动。我收到一个带有以下错误的弹出窗口:“你需要一个新的应用程序来打开这个 *** 链接。我的想法是可能我的 UWP 应用程序配置不正确。所以我尝试使用 Windows 计算器,它有一个不同的SignatureKind:商店,因为它是一个应用程序,您可以从 Windows 商店下载。使用计算器时,我收到了同样的错误

深入研究这个问题,我发现了不同的 Signaturekinds。根据 Microsoft 的说法,只有 SignatureKind 系统具有附加功能,但无处可寻。 SignatureKind 系统的描述是:

该包由一个证书签名,该证书也用于对 Windows 操作系统进行签名。这些程序包可以具有普通应用所没有的附加功能。例如,内置的“设置”应用。

为了测试这一点,我使用了从我的凭据提供程序启动的 Windows 讲述人应用程序(它有一个带有系统的 SignatureKind)。结果就是我想要的目标。在我的 Windows 登录会话期间,Windows 讲述人应用程序成功启动并大声朗读信息。

2. URI 激活在登录会话期间不起作用

在 Windows 事件查看器中查看时,我可以看到以下错误

无法找到源 VSTTExecution 中事件 ID 0 的描述。引发此事件的组件未安装在您的本地计算机上或安装已损坏。您可以在本地计算机上安装或修复该组件。 如果事件起源于另一台计算机,则显示信息必须与事件一起保存。 活动中包含以下信息:

(devenv.exe,PID 16724,Thread 1) IdleProcessorManager.DoWork - Job threw:
Invalid URI: The format of the URI Could not be determined. at
   at System.Uri.CreateThis(String uri,Boolean dontEscape,UriKind uriKind)
   at System.Uri..ctor(String uriString)
   at Microsoft.VisualStudio.TestTools.TestCaseManagement.solutionIntegrationManager.Isrunconfig(String filename)
   at Microsoft.VisualStudio.TestTools.TestCaseManagement.solutionIntegrationManager.<AddSolutionFilesrunconfigsToTmi>d__351.MoveNext()
   at Microsoft.VisualStudio.TestTools.TestCaseManagement.IdleProcessorManager.DoWork()

我知道 UWP 应用程序使用 OnLaunched 和 OnActivated 函数来启动等。例如 ActivationKind。我不熟悉这个,所以也许这可以是一个解决方案?


鉴于以上信息,我希望任何人都有解决我的问题的经验。结果是我希望能够在 Windows 的登录屏幕期间启动我的自定义网络摄像头 UWP 应用程序,就像 Windows 讲述人一样。任何帮助表示赞赏!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。