WinRT LaunchUriAsync 以启动启动 PowerShell 的协议

WinRT LaunchUriAsync to start a protocol which starts PowerShell

在我的 WinJS 应用程序中,我尝试使用 Windows.System.launchUriAsync() 来启动我在 Windows 注册表中注册的协议。

此协议然后启动 PowerShell 命令行。

看起来像这样:

var uri = new Windows.Foundation.Uri("s3update://FooBarApp");
Windows.System.Launcher.launchUriAsync(uri);

注册表是:

从命令行调用此协议工作正常。通过 launchUriAsync() 调用它不起作用。我得到一个成功的回调,唯一的参数是 'false',根据文档,这可能与安全限制有关。没有错误,Windows 事件目录中没有任何内容。

我尝试创建一个小的可执行文件来启动 PowerShell 命令行。当我修改协议以启动此可执行文件而不是直接启动 PowerShell 时。它在命令行以及我的 WinJS 应用程序中工作。这是我的问题的可能解决方案,但我真的希望我至少知道为什么 launchUriAsync 与启动 PowerShell 的协议的关联不起作用。

对于系统二进制文件,默认安全策略是阻止通过启动器 URI 访问 uri 方案。安全的系统二进制文件已选择使用 FTA_SafeForElevation

的 EditFlags 值来支持此功能

Powershell 可能非常危险,因此如果您打算选择加入您的 uri 方案注册,请先进行仔细的安全分析。