2017-10-12 26 views
1

我从UWP应用程序使用下面的代码运行Win32应用程序:返回码LaunchFullTrustProcessForCurrentAppAsync

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

它只是启动应用程序,它不会等到它完成。所以不,没有什么可以找到它的。 –

+0

明白了。是否有可能等待进程完成或在其上设置回调? – algor

回答

2

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

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

有关详细信息,请参阅code sample

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

0

不是一种专业的方式,但我使用剪贴板在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); 

注意我用这个解决方案在众所周知的环境,不会有任何由于多线程或剪贴板中的异步更改而导致的问题。所以在使用这个解决方案之前要确保自己