如何你希望你的 WPF 程序能够以 Windows 的保护机制保护起来,不被轻易反编译的话,那么这篇文章应该能帮到你。

介绍

MSIX 是微软于去年的 Windows 开发者日峰会 上推出的全新应用打包解决方案。其目的是取代旧式的软件打包方式,可用于 Win32、WindowsForm 、 WPF 和 UWP 等应用程序,该打包方式将支持 Windows7 和 Windows8.x。并且让我们的程序不会轻易反编译。

本文,我们将尝试如何使用 MSIX 来打包我们的 DotNetCore 3.0 WPF 应用程序。

使用

我们打开 VS2019,新建一个基于 DotNetCore 3.0 的 WPF 项目。当然,你也可以使用 CLI 来进行创建,命令为 dotnet new wpf

接着,我们在当前的解决方案中创建一个 Windows Application Packaging Project 项目,如下图所示:

然后,设置我们的项目名称,如下图所示:

最后,点击 crate 。此时会弹出一个窗口,让你选择你的程序包运行的目标版本和最低版本,这里我们按需选择即可,我的选择如下图所示:

项目创建完毕后,项目中会有如下文件:

  • xxx.pfx:程序包证书,这个对于每个发布包都是必须的;
  • Package.appxmanifest:程序包的一些信息,包括应用程序的设置、系统权限访问的控制等,双击该文件可以进行设置;

熟悉 UWP 开发的朋友应该对这个项目内容都很熟悉了,这里就不做过多解释。

右键当前项目的 Application 项,然后会有一个 Add Reference 选项卡,点击它,此时会出来一个列表,列出当前解决方案中,我们可进行打包发布的项目,如下图所示:

这里,我们就选择我们之前创建的一个 WPF 项目 WPF1,对它进行打包。

进行上述操作之后,我们可以尝试右键该项目,选择 Build 操作,如果不出意外的话,会出现如下图的错误:

由于 MSIX 目前仅支持 DotNetCore 3.0 Self-Contained 的方式进行打包,这意味发布的包不仅包含我们的应用程序,还会包含完整的 .NET Core 运行时。这种方式可能会使我们的包更大,但是更显著的优点是我们可以部署到任何机器上,无论目标机器是否安装了 .NET Core 3.0 的运行时,尤其是当你打算将你的程序通过 Microsoft Store 进行分发。所以我们需要解决上述说的问题。

右键我们的主程序项目解决方案文件 XX.csproj,在 PropertyGroup 节点下添加一个 RuntimeIdentifiers 节点,如下所示:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">

  <PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<UseWPF>true</UseWPF> <!--添加如下节点-->
<RuntimeIdentifiers>win-x86;win-x64</RuntimeIdentifiers>
</PropertyGroup> </Project>

修改完毕后,重新编译我们的主程序。然后再选择我们的打包程序,右键执行 Deploy,可以成功的将我们的主程序部署到我们的自己机器上。

此外,我们可以右键打包程序,点击 Store 选项卡中的 Create App Packages。如下图所示:

这里为我们的应用程序选择 x64 架构。然后执行 Create 即可。如果一切正常的话,会生成一个发布目录。会出现如下图所示的界面:

注:我们要依据我们的目标平台来选择正确的架构方式。如果执行失败,请确保你的架构方式选择正确,不要选择 Neutral 方式。

到时候,我们只需要将我们的这个发布目录发布给目标用户即可,同时,我们也可以将我们应用发布到应用商店。

总结

众所周知,传统 WPF 程序如何直接打包发布时很容易被反编译的。我们希望我们的软件能够被保护起来,不那么被反编译,所以可以使用 MSIX 可以尝试一下。

使用 MSIX 是一种更安全有效的发布方式,能够确保我们的应用程序和客户系统更加安全。这种方式的部署能将我们的应用程序以沙箱的方式运行,所以安装和卸载都很干净,不会出现各种反三观的 流氓行为,如果我们的应用不走商店分发的话,我们也可以将我们的程序包发给用户,然后通过使用微软在应用商店提供的打包工具 MSIX Packaging Tool 来进行安装我们的应用程序,同样合适很方便的。

此外,我们也可以使用它来更新我们已经发布的应用程序,感兴趣的朋友可以参考文末相关链接,这里就不做介绍了。

相关参考

使用 MSIX 打包 DotNetCore 3.0 客户端程序的更多相关文章

  1. MSIX 打包 DotNetCore 3.0

    使用 MSIX 打包 DotNetCore 3.0 客户端程序 如何你希望你的 WPF 程序能够以 Windows 的保护机制保护起来,不被轻易反编译的话,那么这篇文章应该能帮到你. 介绍# MSIX ...

  2. 使用WIX打包客户端程序

    原文:使用WIX打包客户端程序 用WPF为客户做了个小工具,打包的时候发现VS2012居然没有安装项目了,搜了下才知道现在推荐使用WIX来打包了http://wix.sourceforge.net/, ...

  3. 将传统 WPF 程序迁移到 DotNetCore 3.0

    介绍 由于历史原因,基于 Windows 平台存在着大量的基于 .NetFramework 开发的 WPF 和 WinForm 相关程序,如果将这些程序全部基于 DotNetCore 3.0 重写一遍 ...

  4. 使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0

    使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0 网上的 MapReduce WordCount 教程对于如何编译 WordCount.java 几乎是一笔带过… 而有写到的 ...

  5. 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付

    前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...

  6. DotNetCore 3.0 助力 WPF 开发

    DotNetCore Is AnyWhere. 前言 Visual Studio 2019 已经正式发布了,DotNetCore 3.0 的正式版也指日可待.在之前的版本中,作为一名基于微软生态的传统 ...

  7. 用antd和webview打造一款大数据客户端程序

    要想提高工作效率,必须得有好的工具.大数据有很多组件,但是邪了门儿的就是,竟然没有一个好用的客户端程序. 没办法,我只好用antd+webview自己做了一款跨平台的桌面应用. 先看下效果. 这是gi ...

  8. 初识Modbus TCP/IP-------------C#编写Modbus TCP客户端程序(一)

    转自:http://blog.csdn.net/thebestleo/article/details/52269999 首先我要说明一下,本人新手一枚,本文仅为同样热爱学习的同学提供参考,有不 对的地 ...

  9. 基于 SailingEase WinForm Framework 开发客户端程序(3:实现菜单/工具栏按钮的解耦及状态控制)

    本系列文章将详细阐述客户端应用程序的设计理念,实现方法. 本系列文章以  SailingEase WinForm Framework 为基础进行设计并实现,但其中的设计理念及方法,亦适用于任何类型的客 ...

随机推荐

  1. JAVA基础第五章-集合框架Map篇

    业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...

  2. handler原理

    一.消息机制概述 1.消息机制的简介 (1)Handler是什么 handler使Android给我们提供的用来更新UI的一套机制,也是一套消息处理机制:我们可以用它发送处理消息. (2)Androi ...

  3. Java:基于MD5的文件监听程序

    前述和需求说明 和之前写的 Python:基于MD5的文件监听程序 是同样的功能,就不啰嗦了,就是又写了一个java版本的,可以移步 python 版本去看一下,整个的核心思路是一样的.代码已上传Gi ...

  4. 神经网络——反向传播BP算法公式推导

    在神经网络中,当我们的网络层数越来越多时,网络的参数也越来越多,如何对网络进行训练呢?我们需要一种强大的算法,无论网络多复杂,都能够有效的进行训练.在众多的训练算法中,其中最杰出的代表就是BP算法,它 ...

  5. Win10+RTX2080深度学习环境搭建:tensorflow、mxnet、pytorch、caffe

    目录 准备工作 设置conda国内镜像源 conda 深度学习环境 tensorflow.mxnet.pytorch安装 tensorflow mxnet pytorch Caffe安装 配置文件修改 ...

  6. CSharpGL(46)用Billboard绘制头顶文字

    CSharpGL(46)用Billboard绘制头顶文字 本文介绍CSharpGL用Billboard绘制头顶文字的方法.效果如下图所示. 下载 CSharpGL已在GitHub开源,欢迎对OpenG ...

  7. hashCode()方法以及集合中Set的一些总结

    一.前言 本篇文章没有什么主题,就是一些零散点的总结.周末没事看了几道蚂蚁金服的面试题,其中有好几道都是特别简单的,基础性的题目,就是我们平时用到的,但是发现要是完全说出来还是有一些不清楚的地方,所以 ...

  8. 全球第一免费开源ERP Odoo工业互联网生产制造功能模块术语解析

    物料清单 物料清单(BoM)用于描述物料.每种物料的数量.以及制造某一产品所需的步骤.由于行业和成品性质的不同,同一个文件可能有不同的命名.例如,在制药行业中,可以使用术语“处方”. 周期 产品周期是 ...

  9. 章节九、5-IE Driver

    一.下载IE浏览器驱动,然后解压到存放谷歌和火狐驱动的相同路径中(请观看前面的章节) 下载地址一:http://selenium-release.storage.googleapis.com/inde ...

  10. softmax函数详解

    答案来自专栏:机器学习算法与自然语言处理 详解softmax函数以及相关求导过程 这几天学习了一下softmax激活函数,以及它的梯度求导过程,整理一下便于分享和交流. softmax函数 softm ...