如何通过UWP启动带任意参数的全信任(桌面桥接)应用程序

8
2个回答

12

今天不可能做到这一点。

实现该场景的一种快速方法是让UWP将命令字符串写入本地应用数据/设置中,该数据在两个进程之间共享。因此,完全信任的进程可以在启动后从那里获取命令字符串。

更复杂的解决方案是在两个进程之间建立应用程序服务连接,并通过该连接传递命令字符串。如果需要在两个进程之间保持双向通信,则此方法会很有帮助。

如果由于某些原因您无法更改现有的完全信任进程代码,则可以向包中添加额外的EXE,该EXE仅从应用数据中读取命令字符串,然后使用这些参数(使用Process.Start()或等效方法)启动实际的完全信任EXE。

编辑 我在我的博客上发布了更多详细信息和示例: https://stefanwick.com/2018/04/06/uwp-with-desktop-extension-part-2/


Process.Start() 在 Windows 10 S 中无法使用,这意味着任何使用它的 UWP 应用都无法被接受到 MSFT 应用商店中。 - rfreytag
1
这是不正确的。只要EXE与您的软件包一起提供,Process.Start()在Windows 10S上可以正常工作。您的应用程序将被接受在Microsoft Store中。 - Stefan Wick MSFT
请问您能详细说明一下“将命令字符串写入本地应用程序数据/设置”的意思吗?您具体指的是什么?也许可以提供一行代码示例吗? - ispiro
1
我的意思是在启动进程之前,使用以下API从您的UWP编写命令字符串,然后在完全信任的进程中使用相同的API获取它(因为两个进程都在同一本地应用程序数据上运行):https://learn.microsoft.com/en-us/windows/uwp/design/app-settings/store-and-retrieve-app-data - Stefan Wick MSFT
@StefanWickMSFT 谢谢!完美的回答。 (顺便说一下,除非您在回复中提到 @ispiro,否则我不会收到通知。但是我已经检查过了,所以我看到了您的回复。)再次感谢。 - ispiro
我在我的博客上发布了更多细节和示例:https://stefanwick.com/2018/04/06/uwp-with-desktop-extension-part-2/ - Stefan Wick MSFT

2

我们无法将参数动态传递给完全信任的进程。但是,我们可以使用LocalSettings进行传递。

  1. 将参数添加到本地设置并启动完全信任的进程: 在 C++ 中:

    auto settings = Windows::Storage::ApplicationData::Current->LocalSettings; settings->Values->Insert("arg1", "val1"); settings->Values->Insert("arg2", "val2"); // 启动完全信任的进程 create_task(FullTrustProcessLauncher::LaunchFullTrustProcessForCurrentAppAsync()).then([](task<void> t) {/* ... */});

  2. 在完全信任的进程代码中,

    auto settings = Windows::Storage::ApplicationData::Current->LocalSettings; auto val1 = settings->Values->Lookup("arg1")->ToString();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接