如何使用任意参数从 UWP 启动完全信任(桌面桥)应用程序
How to launch a full-trust (desktop bridge) app from UWP with arbitrary parameters
UWP 应用程序是否可以使用任意命令行参数启动其桌面桥(完全信任的应用程序组件)?我看到可以指定 "argument groups"(请参阅 https://docs.microsoft.com/en-us/uwp/api/Windows.ApplicationModel.FullTrustProcessLauncher),但看起来它只支持使用预定义的 ParameterGroup
。我需要使用以编程方式确定的(在启动时)任意命令行参数来启动 UWP。这可能吗?如果可能,怎么做?
不,今天不可能。
完成该场景的一种快速方法是让 UWP 将命令字符串写入本地应用程序 data/settings,该应用程序在两个进程之间共享。因此完全信任进程可以在从那里启动后获取命令字符串。
更复杂的解决方案是在两个进程之间建立应用服务连接,并通过该连接传递命令字符串。如果您需要在两个进程之间保持来回通信,这将很有帮助。
如果由于某种原因您无法更改现有的完全信任进程代码,您可以向程序包添加一个额外的 EXE,它只从应用程序数据中读取命令字符串,然后启动您的实际完全信任 EXE使用这些参数(使用 Process.Start() 或等效的东西)。
编辑
我在我的博客上发布了更多详细信息和示例:
https://stefanwick.com/2018/04/06/uwp-with-desktop-extension-part-2/
我们无法将参数动态传递给完全信任进程。但是,我们可以使用 LocalSettings 传递它。
将参数添加到本地设置并启动完全信任过程:
在 C++ 中:
auto settings = Windows::Storage::ApplicationData::Current->LocalSettings;
settings->Values->Insert("arg1", "val1");
settings->Values->Insert("arg2", "val2");
// Launch Full trust proc
create_task(FullTrustProcessLauncher::LaunchFullTrustProcessForCurrentAppAsync()).then([](task<void> t) {/* ... */});
全信任流程代码中,
auto settings = Windows::Storage::ApplicationData::Current->LocalSettings;
auto val1 = settings->Values->Lookup("arg1")->ToString();
UWP 应用程序是否可以使用任意命令行参数启动其桌面桥(完全信任的应用程序组件)?我看到可以指定 "argument groups"(请参阅 https://docs.microsoft.com/en-us/uwp/api/Windows.ApplicationModel.FullTrustProcessLauncher),但看起来它只支持使用预定义的 ParameterGroup
。我需要使用以编程方式确定的(在启动时)任意命令行参数来启动 UWP。这可能吗?如果可能,怎么做?
不,今天不可能。
完成该场景的一种快速方法是让 UWP 将命令字符串写入本地应用程序 data/settings,该应用程序在两个进程之间共享。因此完全信任进程可以在从那里启动后获取命令字符串。
更复杂的解决方案是在两个进程之间建立应用服务连接,并通过该连接传递命令字符串。如果您需要在两个进程之间保持来回通信,这将很有帮助。
如果由于某种原因您无法更改现有的完全信任进程代码,您可以向程序包添加一个额外的 EXE,它只从应用程序数据中读取命令字符串,然后启动您的实际完全信任 EXE使用这些参数(使用 Process.Start() 或等效的东西)。
编辑 我在我的博客上发布了更多详细信息和示例: https://stefanwick.com/2018/04/06/uwp-with-desktop-extension-part-2/
我们无法将参数动态传递给完全信任进程。但是,我们可以使用 LocalSettings 传递它。
将参数添加到本地设置并启动完全信任过程: 在 C++ 中:
auto settings = Windows::Storage::ApplicationData::Current->LocalSettings; settings->Values->Insert("arg1", "val1"); settings->Values->Insert("arg2", "val2"); // Launch Full trust proc create_task(FullTrustProcessLauncher::LaunchFullTrustProcessForCurrentAppAsync()).then([](task<void> t) {/* ... */});
全信任流程代码中,
auto settings = Windows::Storage::ApplicationData::Current->LocalSettings; auto val1 = settings->Values->Lookup("arg1")->ToString();