2017-08-31 4 views
1

Je sais que nous pouvons utiliser pour lancer et envoyer paramètre à l'application win32 LaunchFullTrustProcessForCurrentAppAsync(String) méthode etComment lancer l'application .exe avec le paramètre UWP

<desktop:Extension Category="windows.fullTrustProcess" Executable="fulltrustprocess.exe"> 
    <desktop:FullTrustProcess> 
    <desktop:ParameterGroup GroupId="SyncGroup" Parameters="/Sync"/> 
    <desktop:ParameterGroup GroupId="OtherGroup" Parameters="/Other"/> 
    </desktop:FullTrustProcess> 

. Mais ma grande question est: Comment recevoir ce paramètre dans mon application win32 (dans mon cas, l'application win32 est ma console). Est-ce que quelqu'un a de l'aide? Je vous remercie.

Mise à jour pour Stefan réponse
dans l'application win32 ont toujours Main (string [] args), donc si une autre application lancer notre win32 .exe avec le paramètre (par exemple: "mon paramètre" string), args Le tableau de chaînes contiendra cette chaîne "mon paramètre", j'en suis sûr.

Répondre

2

Les paramètres sont fournis en tant qu'arguments dans la fonction Main() de votre processus Win32.

+0

accepté comme réponse car il se concentre sur ma question. – GIANGPZO

1

Une meilleure option consiste à utiliser App Services.

Un service d'application peut vous permettre de communiquer entre deux applications. Heureusement, il existe une extension UWP pour les applications de bureau qui peut vous aider à consommer le service d'application dans votre projet win32. Voici les étapes.

1. Installez UwpDesktop dans votre application Win32

Install-Package UwpDesktop 

2. Créer un point de service App dans votre application Win32

private async void btnConfirm_Click(object sender, EventArgs e) 
    { 
     AppServiceConnection connection = new AppServiceConnection(); 
     connection.AppServiceName = "CommunicationService"; 
     connection.PackageFamilyName = Windows.ApplicationModel.Package.Current.Id.FamilyName; 
     var result = await connection.OpenAsync(); 
     if (result == AppServiceConnectionStatus.Success) 
     { 
      ValueSet valueSet = new ValueSet(); 
      valueSet.Add("name", txtName.Text); 

      var response = await connection.SendMessageAsync(valueSet); 
      if (response.Status == AppServiceResponseStatus.Success) 
      { 
       string responseMessage = response.Message["response"].ToString(); 
       if (responseMessage == "success") 
       { 
        this.Hide(); 
       } 
      } 
     } 
    } 

Si votre fichier .exe fait partie du Projet UWP, votre Package.Current.Id.FamilyName doit rediriger vers le PFN de l'UWP.

3. Créer de l'autre côté du canal dans l'application UWP

maintenant créer un service d'applications de base dans votre application UWP

AppServiceConnection connection = new AppServiceConnection(); 
connection.AppServiceName = "CommunicationService"; 
connection.PackageFamilyName = Windows.ApplicationModel.Package.Current.Id.FamilyName; 
connection.RequestReceived += Connection_RequestReceived; 
var result = await connection.OpenAsync(); 

4. demande de connexion poignée

Enfin, vous devez gérer la connexion entrante dans Connection_RequestReceived

private async void Connection_RequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args) 
{ 
    var deferral = args.GetDeferral(); 
    string name = args.Request.Message["name"].ToString(); 
    Result.Text = $"Hello {name}"; 
    ValueSet valueSet = new ValueSet(); 
    valueSet.Add("response", "success"); 
    await args.Request.SendResponseAsync(valueSet); 
    deferral.Complete(); 
} 

Bien que nous retournions uniquement valueSet avec un seul élément, vous pouvez inclure d'autres éléments tels que des instructions ou des paramètres spécifiques dans le valueSet. Ceux-ci seront disponibles pour vous en résultat au côté Win32.

Ceci est un exemple très simple réduite de blog MSDN officiel par l'équipe du centenaire trouvé ici:

https://blogs.msdn.microsoft.com/appconsult/2016/12/19/desktop-bridge-the-migrate-phase-invoking-a-win32-process-from-a-uwp-app/

Pour le rendre plus robuste, vous pouvez vous assurer que vous créez la connexion de service de l'application à la fin UWP seulement une fois que votre application Win32 est en place en utilisant AppServiceTriggerDetails comme dans l'article de blog

Vous devrez également déclarer le service d'application dans Package.appxmanifest fichier

<Extensions> 
    <uap:Extension Category="windows.appService"> 
    <uap:AppService Name="CommunicationService" /> 
    </uap:Extension> 
    <desktop:Extension Category="windows.fullTrustProcess" Executable="Migrate.WindowsForms.exe" /> 
</Extensions> 

Vous pouvez trouver l'échantillon du billet de blog ici:

https://github.com/qmatteoq/DesktopBridge/tree/master/6.%20Migrate

Bonne programmation. :)

+0

Je pense que votre nouvelle approche peut être meilleure que le lancement de l'approche de fichier exe, mais votre réponse ne se concentre pas sur la question ci-dessus. Merci. – GIANGPZO