• 第六届中国创业投资高峰论坛在深成功举行 2019-05-23
  • 如何制订企业发展计划 2019-05-09
  • 酒成为5月基金上涨最大功臣,白酒行情景气?白酒 基金 2019-05-09
  • 日研究用iPS细胞再现小脑疾病成因 2019-04-30
  • 万水千山粽是情 带你了解端午节民俗文化——黄河新闻网 2019-04-30
  • 端午节起中国公民出入境通关排队不超过30分钟 2019-04-27
  • 物智 —频道 春城壹网 七彩云南 一网天下 2019-04-19
  • 西藏职业技术学院全面推进毕业生就业创业 2019-04-19
  • 南瓜子营养价值高 这样吃最健康-美食资讯 2019-04-15
  • 国家统计局:5月份能源生产总体平稳 2019-04-15
  • 衔接“新高考” 要求变更高 2019-03-26
  • 上交所向“中技系”两公司下发监管工作函 2019-03-24
  • 对,这实质上是货币战争。美国的这些行动是要让前些年泛滥发行的美元裹携各国人民的血汗回流美国,经济的、军事的、政治的手段都要用上,中国对此要有足够的准备。 2019-03-24
  • 新疆公益组织,公益求助,晨报救命血联盟 2019-03-21
  • 以新的更大作为发挥广东两个重要窗口作用 2019-03-21
  • 上海天天彩选四今晚开奖结果:UWP: 通过命令行启动 UWP 应用

    今天上海选四开奖号码 www.kcnj.net

    肥美的熊掌在火上烤着,油在熊掌上滋滋作响,那熊掌上的脂肪在火的烘烤下逐渐融化起来,最后只剩下了熊掌的筋肉,而那些油也都是渗透了进去。

    40公分高红叶石楠价格多少钱一棵?

    布玛对此可是经常吃醋,说女儿居然不跟妈妈好,实在是太对不起她那么疼布拉了,而琪琪等女也说唯一能制服这个小魔女的可能也只有她的父亲了。
    “兄弟们,给我仔细的搜,搜出来一个,老子赏大洋五十!”排长的一个月军饷估计也就这个数,为了能够出这口气,他打算不要这个月的军饷了。

    他不理她,一直扛着她上了二楼,进了她的大卧室,一把将她丢下,然后就要解衣服。李凤灵贴上来拦住他,嗲声说:“别急,先去冲个凉吧?!?/p>

    UWP: 通过命令行启动 UWP 应用


    最近在开发应用的过程中,我遇到了如标题所述的需求,其实主要是为了能够快捷启动应用,正像我们可以在“运行”对话框中可以输入一些可执行程序的名称后,就能够直接启动它;这样做,可以增加 App 的易用性。在查了一些文档后,得知在 Windows Build 16266 之后,就加入相关的 API,因此要实现以及使用这一功能,Window 系统和 SDK 的版本都要大于 16266,Fall Creators Update (Build 16299) 则完全满足这一条件。

    实现

    要使用命令行启动 UWP 应用,其实非常简单,只需要两步:首先,在 Package.appxmanifest 中添加 appExecutionAlias 扩展;然后,在 App.OnActived 事件中做相应的处理。

    1. 修改Package.appxmanifest

    右击项目中的 Package.appxmanifest 文件,在快捷菜单中选择“打开方式“->”XML 文本编辑器“。打开后,对它的内容按以下修改:

    <Package
      xmlns="//schemas.microsoft.com/appx/manifest/foundation/windows10"
      xmlns:mp="//schemas.microsoft.com/appx/2014/phone/manifest"
      xmlns:uap="//schemas.microsoft.com/appx/manifest/uap/windows10"
      xmlns:uap5="//schemas.microsoft.com/appx/manifest/uap/windows10/5"
      IgnorableNamespaces="uap mp uap5">
      ...
      <Applications>
        <Application
            ...
          <Extensions>        
              <uap5:Extension
                Category="windows.appExecutionAlias"
                Executable="TestCmdLineApp.exe"
                EntryPoint="TestCmdLineApp.App">
                <uap5:AppExecutionAlias>
                  <uap5:ExecutionAlias Alias="App.exe" />
                </uap5:AppExecutionAlias>
              </uap5:Extension>        
          </Extensions>
        </Application>
      </Applications>
      ...
    </Pakage>

    其中加粗部分是我们需要补充的内容??梢钥吹?,我们添加了一个名为 appExecutionAlias? 的扩展 (Extension)。在 Extension 节点中包括了几个属性,它们的意义分别如下:

    1) Category 属性指明 Extension 的类别,对于我们当前的需求,它的值固定为 windows.appExecutionAlias,即为应用的运行提供别名;
    2) Executable 属性指明当前应用的 exe 名称,也即:程序集名称 + ".exe";
    3) EntryPoint 属性指明当前应用的入口点,也即 App 类的完整名称(包含其所在的命名空间);
    4) 在 AppExecutionAliasExecutionAlias? 节点中的 Alias 属性,就是我们为要为当前应用定义的命令行启动名称;这里需要说明三点:

    a) 它可以与前面 Executable 属性值相同,也可以不同,比如更简短一些,便于用户记住与输入;
    b) 如果定义的别名,已经被当前机器上安装的其它应用占用了,那么它就不会生效,也即,谁先占用就对谁有效(当然,如果先前占用的应用被卸载了,那么这个别名就可以被你的应用使用);
    c) 可以添加多个 ExecutionAlias? 节点,为应用指定多个别名。通过为应用提供更多的别名,可以解决别名被占用的问题(如果确实存在这个问题)。

    2. 处理 OnActivated 事件

    在 App.OnActived 事件中,我们对 IActivatedEventArgs 参数类型判断,如果其 Kind 属性为 CommandLineLaunch,则认为是命令行启动,接下来所做的就像在 OnLaunched 事件中一样,对 Frame 初始化并导航到应用的主页,如下:

            protected override void OnActivated(IActivatedEventArgs args)
            {
                if (args.Kind == ActivationKind.CommandLineLaunch)
                {
                    // ...
                }
    
                Frame rootFrame = Window.Current.Content as Frame;
    
                if (rootFrame == null)
                {
                    rootFrame = new Frame();
                    rootFrame.NavigationFailed += OnNavigationFailed;
                    Window.Current.Content = rootFrame;
                }
    
                rootFrame.Navigate(typeof(MainPage));
    
                Window.Current.Activate();
                base.OnActivated(args);
            }

    3. 参数处理

    使用命令行启动应用有一个很大的好处,用户在启动时可以携带参数,如: app.exe a, app.exe a b, app.exe /type:a 等,而应用则根据用户提供的参数作相应的处理。要得到用户传递的参数,只要将 IActivatedEventArgs 类型的参数转换为? CommandLineActivatedEventArgs,通过它的? Operation.Arguments 属性即可得到,剩下的就是对参数进行分析并根据参数进行相应的处理。除了参数,我们也能够得到用户是从哪个目录启动 App 的,这是通过 Operation.CurrentDirectoryPath 属性得到的。完整代码如下:

            protected async override void OnActivated(IActivatedEventArgs args)
            {
                string arugment = string.Empty;
    
                if (args.Kind == ActivationKind.CommandLineLaunch)
                {
                    var cmdArgs = args as CommandLineActivatedEventArgs;
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine($"Argument: {cmdArgs.Operation.Arguments}");
                    sb.AppendLine($"CurrentDirectoryPath: {cmdArgs.Operation.CurrentDirectoryPath}");
                    await new MessageDialog(sb.ToString()).ShowAsync();
                }
    
                Frame rootFrame = Window.Current.Content as Frame;
    
                if (rootFrame == null)
                {
                    rootFrame = new Frame();
                    rootFrame.NavigationFailed += OnNavigationFailed;
                    Window.Current.Content = rootFrame;
                }
    
                rootFrame.Navigate(typeof(MainPage), arugment);
    
                Window.Current.Activate();
                base.OnActivated(args);
            }

    最后,要测试效果,需要部署(Deploy)应用。

    部署完成后,在“运行”(Win + R)对话框中输入上面定义的别名(和参数),即可。当然,在“命令提示符”窗口甚至在“资源管理器”窗口的地址栏中,你都可以输入别名来启动应用。

    背后原理

    为什么在上述这些位置我们输入别名后,就可以运行应用呢?为了解决这个问题,首先我们使用 where 命令得看看对应的命令究竟在哪里。在“命令提示符”窗口中,输入: where 别名,得到这样的结果:

    C:UsersAdmin>where app
    C:UsersAdminAppDataLocalMicrosoftWindowsAppsApp.exe

    在“资源管理器”中打开对应的路径,会看到在这个目录下存放了当前机器中所有那些使用别名的应用,其实这里的文件可以认为是一个快捷方式。

    不仅如此,这个目录也在 PATH 环境变量中(可在“命令提示符”中使用 path 命令查看或在“系统属性”的“环境变量”对话框中查看),因此,我们才可以在任何位置都能启动应用。

    除此以外,作为用户,我们还可以在桌面(或其它任何目录)为应用创建快捷方式,右击桌面->创建快捷方式,然后输入别名 和参数(可?。?。通过双击快捷方式图标,也可以启动应用。这一点类似于创建磁贴,不过,它要比磁贴更灵活。我们甚至还可以为不同的参数创建多个快捷方式,也可以为每个快捷方式指定不同的图标。这样,是不是感觉更像 Win32 应用了呢?

    总结

    本文主要提到了如何使用命令行来启动 UWP 应用,为应用提供这一特性可以为其增加易用性以及灵活性。作为 App 的使用者,可以更便利、更灵活地打开、使用应用。这样,使得 UWP 应用和 Win32 程序的行为更加一致。

    参考资料:

    Command-Line Activation of Universal Windows Apps

    当前文章://www.kcnj.net/news_49449.html

    发布时间:2019-05-27 04:21:48

    狗牙根适合在三月份播种吗? 冬牧70一亩种多少斤种子? 翠菊是宿根花卉吗? 非洲菊草籽报价哪家靠谱? 马尾松种子怎么种植最适合? 山东哪里有卖山梅花种子的? 12月可以播种元宝枫吗? 水蜡育苗每亩播种量多少斤?

    多年生黑麦草种植条件有哪些? 红花槐种子哪里卖呢? 波斯菊种子种植深度多少? 安徽适合种植地肤吗? 哪里有卖野生矢车菊草籽? 湖北哪里有卖蟠桃种子的? 金银木种子浸种催芽泡多长时间? 日本女贞种子播种时间几月最佳? 杜英种子怎么种植最适合?

    编辑:开龙王通

      

    Comments are closed.

  • 第六届中国创业投资高峰论坛在深成功举行 2019-05-23
  • 如何制订企业发展计划 2019-05-09
  • 酒成为5月基金上涨最大功臣,白酒行情景气?白酒 基金 2019-05-09
  • 日研究用iPS细胞再现小脑疾病成因 2019-04-30
  • 万水千山粽是情 带你了解端午节民俗文化——黄河新闻网 2019-04-30
  • 端午节起中国公民出入境通关排队不超过30分钟 2019-04-27
  • 物智 —频道 春城壹网 七彩云南 一网天下 2019-04-19
  • 西藏职业技术学院全面推进毕业生就业创业 2019-04-19
  • 南瓜子营养价值高 这样吃最健康-美食资讯 2019-04-15
  • 国家统计局:5月份能源生产总体平稳 2019-04-15
  • 衔接“新高考” 要求变更高 2019-03-26
  • 上交所向“中技系”两公司下发监管工作函 2019-03-24
  • 对,这实质上是货币战争。美国的这些行动是要让前些年泛滥发行的美元裹携各国人民的血汗回流美国,经济的、军事的、政治的手段都要用上,中国对此要有足够的准备。 2019-03-24
  • 新疆公益组织,公益求助,晨报救命血联盟 2019-03-21
  • 以新的更大作为发挥广东两个重要窗口作用 2019-03-21