通过 Windows 10 uwp 上的代码重新启动
Posted
技术标签:
【中文标题】通过 Windows 10 uwp 上的代码重新启动【英文标题】:restart via code on windows 10 uwp 【发布时间】:2016-02-11 14:29:04 【问题描述】:我们创建了一个在平板电脑上以 Windows 10 信息亭模式运行的 Windows 10 应用程序。它工作得很好,但是,由于位置非常偏远,wifi连接有时会丢失。我们尝试从网络方面解决问题,但是当设备丢失并重新获得互联网访问权限时,应用程序仍会挂起,就好像它没有互联网访问权限并显示空白页面一样。在使用这些设备的地方,它们用螺栓固定在墙上以防止被盗。这意味着如果我们想重新启动它非常耗时,因为我们必须从墙上拧下外壳然后打开外壳才能访问电源按钮,而让应用程序再次成功运行的唯一方法是执行在设备上重新启动。
有人建议我们有办法从应用程序重新启动,但是,我尝试过的每个代码示例都不适用于 Windows 10 UWP。这是我发现的最常见的一种:
System.Diagnostics.Process.Start("restart", "/r");
我可以访问命名空间
System.Diagnostics
但是 Process 类不存在。有人对通过 Win 10 UWP 上的代码重新启动有建议吗?或者更好地解决我们的问题?提前致谢。
值得一提的是,我也尝试过执行 Powershell 命令,但我需要为 Powershell 类引用的 dll 与 UWP 不兼容。
【问题讨论】:
不可能。我建议寻找导致必须直接重启的错误或使用非 UWP 应用程序。 寻找 Win 10 沙盒可能允许的除重启以外的替代解决方案,例如或许重启飞行模式来修复,或者以某种方式触发网络连接来清除,那么也许你可以编写这些选项。 感谢两位的回复,我会考虑您的建议。 【参考方案1】:UWP 应用可用的 API 无法满足您的要求。这是一个安全决定。通过商店分发的应用不应执行重启机器之类的操作。
根据您的情况,虽然您不需要经过商店。这意味着您可以 PInvoke 本机代码来做任何您想做的事情。这仍然需要在实际设备上启动。
【讨论】:
你是对的,我正在侧载应用程序而不是将其发布到商店。感谢您的帮助! 旁加载是否支持调用原本会受到限制的 API?我的理解是,侧载仅模拟 Windows 应用商店部署,因此我认为会受到相同的安全限制。不是这样吗? @devios 如果侧载它没有经过商店的检查,以确保你没有使用你不应该使用的东西。【参考方案2】:是的,你可以做到! 您应该在应用功能声明中添加 IoT 系统管理:
<Capabilities><iot:Capability Name="systemManagement"/></Capabilities>
您还需要将“Windows IoT Extension for UWP”添加到您的项目中
将此用于关机
Windows.System.ShutdownManager.BeginShutdown(Windows.System.ShutdownKind.Shutdown, TimeSpan.FromSeconds(1)); //Delay is not relevant to shutdown
或重启
Windows.System.ShutdownManager.BeginShutdown(Windows.System.ShutdownKind.Restart, TimeSpan.FromSeconds(1)); //Delay before restart after shutdown
您可以在此Link获取更多信息
【讨论】:
IoT 扩展仅适用于 Windows IoT 设备 是的,这不适用于 PC。微软比这更聪明。以上是关于通过 Windows 10 uwp 上的代码重新启动的主要内容,如果未能解决你的问题,请参考以下文章
在 ARM 上的 Windows 10 上检测 UWP 应用仿真
如何在 Windows 10 上的 UWP 中输出到控制台?