如何从winform启动Windows通用应用程序

时间:2017-01-27 05:19:06

标签: c# .net windows uwp windows-10-universal

我正在尝试使用以下代码从我的winform运行Windows Universal App但不幸的是它会打开文档文件夹。我是UWP应用程序开发的新手。这是启动UWP应用程序的正确方法吗?

Process p = new Process();
            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.FileName = "explorer.exe";
            startInfo.Arguments = @"shell:appsFolder\Microsoft.SDKSamples.CameraAdvancedCapture.CS_8wekyb3d8bbwe!App";
            p.StartInfo = startInfo;
            p.Start();

3 个答案:

答案 0 :(得分:2)

你真的有两个问题:

  1. 如何从WinForms应用程序启动协议
  2. 如何正确启动UWP应用。
  3. 要从WinForms应用程序启动协议,请使用带有 UseShellExecute = true 的Process对象。不要尝试使用Explorer.exe启动它作为过程。

    启动应用程序的最佳方式是通过协议,只要应用程序定义一个。如果你控制应用程序,那么你可以定义一个协议,如@Romasz所示:Handle URI activation

    shell:你在命令行中使用的appsFolder技巧是一个方便的脚本黑客,但它没有记录或保证。不要发送依赖它的代码。

    获得协议后,您可以使用Process.Start启动它:

    以下是启动People应用程序的shell hack:

    Process p = new Process();
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.UseShellExecute = true;
    startInfo.FileName =  startInfo.FileName =  @"shell:appsFolder\Microsoft.People_8wekyb3d8bbwe!App";
    p.StartInfo = startInfo;
    p.Start();
    

    由于人物应用defines a documented protocol,以这种方式启动它会更好。这也可以让我们选择我们想要的联系方式:

    Process p = new Process();
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.UseShellExecute = true;
    startInfo.FileName = @"ms-people:viewcontact?PhoneNumber=8675309";
    p.StartInfo = startInfo;
    p.Start();
    

    启动未定义协议的UWP应用程序的正确方法是使用IApplicationActivationManager。这就是shell将在内部使用的内容,它可以让您更好地控制您正在启动的内容以及如何启动。

    IApplicationActivationManager::ActivateApplication in C#?

    上使用来自C#的IApplicationActivationManager有一个stackoverflow问答

答案 1 :(得分:1)

您可以使用Automate launching Windows 10 UWP apps

"C:\Program Files (x86)\Windows Kits\10\App Certification Kit\microsoft.windows.softwarelogo.appxlauncher.exe" MyPackageName_ph1m9x8skttmg!AppId

MyPackageName_ph1m9x8skttmg是您的UWP应用的Package family nameAppIdApplication Id xml元素下的Package.appxmanifest文件中的<Applications>

答案 2 :(得分:0)

你可以register the app for the URI scheme然后激活它。在应用程序内部,您将必须处理OnActivated事件。

至于更多信息,this MSDN pagethis SO answer可能会有所帮助。