如何从 Windows 市集应用程序启动桌面应用程序

这是昨天一个学生问我的问题‘怎么从 Windows Store App 启动 Desktop Application?’,这是个好问题而且引起了我的兴趣,老实说,压根儿从来没想过这种情境,但这问题真的太有趣了,答案是:‘的确有办法从 Windows 市集应用程序启动桌面应用程序,重点是一点也不难’,接下来就来看看是怎么达成这样的需求。


       这是昨天一个学生问我的问题‘怎么从 Windows Store App 启动 Desktop Application?’,这是个好问题而且引起了我的兴趣,老实说,压根儿从来没想过这种情境,但这问题真的太有趣了,答案是:‘的确有办法从 Windows 市集应用程序启动桌面应用程序,重点是一点也不难’,接下来就来看看是怎么达成这样的需求。

       一开始我想聊聊思考这问题的路子,第一个想法是:‘ 一个 Windows 市集应用程序如何启动另外一个 Windows 市集应程序?’,这个答案很明显,通常是透过 URI 或 File Association 来达成。既然如此,Windows 市集应用程序应该也可以透过这种方式来启动桌面应用程序才对。然后我就做了一个实验,我在 Metro IE 上打上 mms:// 的通讯协定测试是否能够启动Windows Media Player,结果是正确启动的;至此,答案已经很明显了,既然 Windows Media Player 这个桌面的应用程序可以这样被启动,其它的应用程序也应该可以这么做,于是我就开始动手测试与验证自己的想法是否正确。

       整个的测试过程是这样完成的:

       (1)  先做一个 Windows Forms Application 当做要被调用的对象,这个程序画面只有一个 Lable,但为了要让启动时可以传参数,稍微修改了一些东西。

Program.cs

扫描二维码关注公众号,回复: 7270953 查看本文章
  1. static class Program  
  2. {              
  3.     [STAThread]  
  4.     static void Main(string[] args)  
  5.     {  
  6.         Application.EnableVisualStyles();  
  7.         Application.SetCompatibleTextRenderingDefault(false);  
  8.         Application.Run(new Form1(args));  
  9.     }  

   

Form1.cs

  1. public partial class Form1 : Form  
  2. {  
  3.     public Form1()  
  4.     {  
  5.           
  6.     }  
  7.     public Form1(string[] args)              
  8.     {  
  9.         InitializeComponent();  
  10.         var data = args[0].Split(':');  
  11.         if (data.Length > 1)  
  12.         {  
  13.             label1.Text = data[1];  
  14.         }  
  15.         else 
  16.         {  
  17.             label1.Text = "no args";  
  18.         }  
  19.     }  

    

       (2) 接着我在电脑的注册表中新增自订的 URI Protocol, 命名为 callbill,参考 Registering an Application to a URI Scheme

2013-11-03_160439_thumb

       (3) 最后新增一个 Windows 市集应用程序项目,在 UI 上放一个 Button ,为 Button.Click 事件撰写委派函数如下

  1. async private void Button_Click(object sender, RoutedEventArgs e)  
  2. {  
  3.     string uriToLaunch = "callbill:Hello_Uri_Launcher";  
  4.     var result = await Windows.System.Launcher.LaunchUriAsync(new Uri(uriToLaunch ));             

        

       执行 Windows 市集应用程序,按下 Button 的最后结果

2013-11-03_161133

       如同我一开头所讲的就是这么简单,几个轻松的步骤就可以完成‘听起来似乎很困难’的事情。





原文:大专栏  如何从 Windows 市集应用程序启动桌面应用程序


猜你喜欢

转载自www.cnblogs.com/chinatrump/p/11516537.html