为当前应用程序启动完全信任进程的返回代码

3
我正在使用以下代码从UWP应用程序运行win32应用程序:
```csharp Process.Start("myWin32App.exe"); ```
请注意,这需要在应用程序清单中启用“允许在后台进程中执行任意代码”权限。
var operation = FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync(groupId);
operation.Completed = new AsyncActionCompletedHandler(asyncHandler);
....
private static void asyncHandler(IAsyncAction asyncInfo, AsyncStatus status)
{
    if (status == AsyncStatus.Completed)
    {
          System.Diagnostics.Debug.WriteLine(asyncInfo.ToString());
          System.Diagnostics.Debug.WriteLine(asyncInfo.ErrorCode);
    }
}

异步处理程序以已完成状态调用,但其中没有错误代码。

如何获取可信Win32进程的结果返回代码?

谢谢!


1
它仅仅是启动应用程序,不会等待其完成。因此,你无法从中找到任何信息。 - Hans Passant
1
明白了。有没有可能等待进程完成或以某种方式设置回调? - algor
2个回答

4

如何获取可信 win32 进程的结果返回代码?

@HansPassant 的建议是正确的。如果您想从使用 LaunchFullTrustProcessForCurrentAppAsync APIs 启动的 win32 应用程序进程中获取一些数据,则可以使用 AppService 在 UWP 和 win32 进程之间传递数据。

您可以参考 代码示例 以了解详细信息。

在此示例中,UWP 应用程序使用 LaunchFullTrustProcessForCurrentAppAsync 启动 win32 应用程序。win32 应用程序用于从 sqlserver 数据库获取数据。在 UWP 中,它使用 AppService 和 ValueSet 将“连接”传递给 win32 应用程序。在 win32 应用程序中,它使用 AppService 和 ValueSet 将数据返回给 UWP。


1

虽然不是专业的方法,但我使用剪贴板在UWP应用程序和WPF应用程序(受信任的可执行文件)之间传递数据。我们可以使用以下方法将数据设置到剪贴板中:

在WPF中

Clipboard.SetText("Hello, clipboard"); 

在 UWP 中
var dataPackage = new Windows.ApplicationModel.DataTransfer.DataPackage();
dataPackage.SetText(file.Path);
Windows.ApplicationModel.DataTransfer.Clipboard.SetContent(dataPackage);

注意:我在一个众所周知的环境中使用此解决方案,不会因为多线程或剪贴板异步更改而出现任何问题。因此,在使用此解决方案之前,请确保自己做好准备。


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