C# WPF上位机开发(知识产权ip保护)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
上位机软件如果是和硬件模块搭配开发,这个时候大部分上位机基本上都是白送的,不会收取相关的费用。但是,如果上位机软件是为特定行业、特定项目开发的,这个时候上位机收费就是一个必然的选项。已经自己也投入了一定的经历和时间,合理的回报肯定是也是对这份劳动最起码的尊重。
不过商业社会是复杂的,总有一些人或者公司,希望通过低价或者免费的方式得到别人开发的软件作品,这种情况下我们就要想办法做出一些措施来保护自己的软件开发成果。目前来说,很多方式都可以做到这一点,具体哪种比较好大家可以根据自己的情况灵活来选择。
1、试用软件进行功能裁剪
很多时候客户使用部分软件功能,这是不可避免的,或者说是很正常的一个商业行为。这个时候,我们发布出去的软件最好是一个功能简略版,或者只开发一部分功能是比较合适的。这样客户后续即使不付费,也没有办法使用完整的功能。
2、mac绑定法
有一些场景,我们希望软件和特定的pc电脑进行绑定。那么这种情况下,可以通过在软件中加入特定信息bind的方法来进行确认和验证,常用的方法就是mac地址绑定。不过这种方法,客户如果需要更换电脑,那么也要先将原来的软件进行mac解绑,然后和新的pc进行重新绑定,这样是比较合适的。
3、次数设定
次数限定也是比较容易想得到的方法。假设我们软件只能使用100次,那么在客户使用101次的时候就要弹出对话告警。当然,同样这种方法也有一些弊端,比如说用户可能卸载软件后,重新安装软件,这样可能又有100次试用机会。这就很多软件每次只能使用15天,如果自己不想付费,只能不停试用是一样的。
4、日期限制
日期限制也是不错的一种方式,比如说软件允许使用1年,后面的每一年只能付费后才能继续使用,这种方式其实也可以的。我们可以写一个c# wpf程序来说明下,
<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:sys="clr-namespace:System;assembly=mscorlib"xmlns:local="clr-namespace:WpfApp"mc:Ignorable="d"Title="MainWindow" Height="450" Width="600"><Grid><StackPanel><DatePicker x:Name="expirationDatePicker" Width="200" Height="30" Margin="10,120,0,0" SelectedDate="{x:Static sys:DateTime.Now}" /><Button Content="Check Expiration" Width="200" Height="80" Click="CheckExpiration_Click" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="197,50,196.6,0"/></StackPanel></Grid>
</Window>
首先设计一个界面,界面上面有一个周期选择框,一个按钮。完了之后,继续编写代码,
using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Windows;namespace WpfApp
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private void CheckExpiration_Click(object sender, RoutedEventArgs e){DateTime expirationDate = expirationDatePicker.SelectedDate ?? DateTime.MinValue;DateTime currentDate = DateTime.Now;if (currentDate <= expirationDate){MessageBox.Show("软件在有效期内。");}else{MessageBox.Show("软件已过期。");}}}
}
代码部分就比较简单,首先选择一个时间,接着单击按钮。如果选择的时间比当前时间早,那说明已经过了有效期,反之则含在有效期之内。

5、usb加密法
这种硬件加密其实是最好的,它首先对程序进行加密。接着软件起来的时候,它会首先检查usb加密u盘有没有插入,如果没有插入或者读取的数据不对,那么软件就无法正常启动。这种方法其实蛮不错的,缺点就是需要额外的硬件,以及如果客户环境是虚拟机环境,那么可能就无法正常使用这种方法。
目前很多电商平台都有这种usb加密u盘,大家可以去测试下。
6、小提示
一般来说,对于特定的小范围软件,使用日期法或者mac法其实就可以了。只有软件价值很大的时候,推荐使用usb加密法。当然,不管是哪种方法,最好软件后台有一个联网机制,坦率来说,一旦有了联网机制,就算客户能够暂时破解,也会很快被后台检测到的。这也是目前很多国内、国际大公司的常规做法。
除了联网机制,另外一个需要注意的,就是如果有日期或者次数的限制,这部分内容需要用aes或者rsa加密一下,千万不要变成明文放在程序中,不然很容易被work around过去的。
相关文章:
C# WPF上位机开发(知识产权ip保护)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 上位机软件如果是和硬件模块搭配开发,这个时候大部分上位机基本上都是白送的,不会收取相关的费用。但是,如果上…...
【Jenkins】Pipeline 语法解析(声明式Pipeline)
文章目录 一、Sections1、agent(代理)agent 参数值 2、post3、stages(阶段)4、steps(步骤) 二、Directives 指令1、environment 环境变量2、options 配置选项可用的选项 options 3、parameters 参数可用的参…...
二叉树的最大深度(LeetCode 104)
文章目录 1.问题描述2.难度等级3.热门指数4.解题思路方法一:深度优先搜索GolangC 方法二:广度优先搜索GolangC 参考文献 1.问题描述 给定一个二叉树 root ,返回其最大深度。 叉树的「最大深度」是指从根节点到最远叶子节点的最长路径上的节…...
03-数据结构-栈与队列
1.栈 栈和队列是两种操作受限的线性表。如上图所示显示栈的结构 栈:先进后出,入栈(数据进入) 和出栈(数据出去)均在栈顶操作。 常见栈的应用场景包括括号问题的求解,表达式的转换和求值&#…...
功能测试转向自动化测试 。10 年 心路历程——愿测试人不再迷茫
十年测试心路历程: 由于历史原因,大部分测试人员,最开始接触都是纯功能界面测试,随着工作年限,会接触到一些常用测试工具,比如抓包,数据库,linux 等。 我大学学的计算机专业&#…...
VIM ——Vimtutor 个人总结【从入门到精通】
精进 Vim 编辑器技能:从入门到精通 文章目录 精进 Vim 编辑器技能:从入门到精通学习资源[Vim 自带教程中文版 —— vimtutor-CSDN博客](https://blog.csdn.net/qq_40395874/article/details/116047253)[Learn Vimscript the Hard Way (stevelosh.com)](h…...
gitea分支、合并
一、创建分支,推送到远程仓库 git branch dev git checkout dev 或者可以使用合并的命令来完成上述两个步骤: git checkout -b dev在新分支上进行修改、提交代码等操作 接下来,将新分支推送到远程仓库。使用git push命令,并…...
探究 JavaScript 类型检查的利器:typeof 和 instanceof
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
VSCode报错插件Error lens
1.点击左侧扩展图标→搜索“error lens”→点击“安装” 2.安装成功页面如下: 3.代码测试一下:书写代码的过程中会出现红色提醒或红色报错 4.另外推荐小伙伴们安装中文插件,学习过程中会比较实用方便,需要安装中文插件的小伙伴请点…...
go-zero开发入门之gateway深入研究1
创建一个 gateway 示例: // main.go package mainimport ("flag""fmt""gateway/middleware""github.com/zeromicro/go-zero/core/conf""github.com/zeromicro/go-zero/gateway" )var configFile flag.String(&…...
【每日一题】反转二叉树的奇数层
文章目录 Tag题目来源题目解读解题思路方法一:广度优先搜索方法二:深度优先搜索 写在最后 Tag 【深度优先搜索】【广度优先搜索】【二叉树】【2023-12-15】 题目来源 2415. 反转二叉树的奇数层 题目解读 反转二叉树奇数层的节点。 解题思路 对于二叉…...
vue 项目配置反向代理导致项目白屏
问题:vue 项目配置反向代理导致项目白屏 一、现象描述 添加反向代理代码后,前端运行白屏 // 设置baseURL,8888是后端端口号,前端请求默认发送到baseURL的地址 var axios require(axios) axios.defaults.baseURL http://local…...
全国县级行政区点位数据,Shp+excel格式
基本信息. 数据名称: 县级行政区点位 数据格式: Shpexcel 数据时间: 2021年 数据几何类型: 点 数据坐标系: WGS84坐标系 数据来源:网络公开数据 数据字段: 序号字段名称字段说明1xzqhdm_1省代码2xzqhmc_1省名称3xzqhdm_2市代码4xzqhmc_2市代…...
文件包含的提升刷题
上一篇文章:一篇文章带你入门文件包含-CSDN博客 已经开始入门了文件包含,那现在开始拔高提升刷题! 1. 拿到题目后啥也没有,所以也不知道要读取啥文件,那就查看源代码。 直接看if的条件就可以知道一定要设置cookie&a…...
入门级银行测试岗位招聘,只需具备这些基本条件!
2023年应该说是超乎意外的寒冷,几乎算是百业凋零。充斥在各个地方各个行业的,更多的是裁员的消息,很少有以往的风风火火的招聘了。无论是金九银十还是在以往的淡季。 谁也不知道这样一个特殊的寒冬还有多久才能过去。但是无论面对什么样的局…...
组里新来了个00后,真卷不过....
📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…...
python 命令添加参数
官网 argparse模块可以很容易地编写用户友好的命令行界面。程序定义它需要什么参数,argparse将找出如何从sys.argv中解析这些参数。argparse模块还会自动生成帮助和用法消息。当用户为程序提供无效参数时,该模块也会发出错误。 核心功能 argparse模块对…...
LVS负载均衡器(DR模式)+nginx七层代理+tomcat多实例+php+mysql 实现负载均衡以及动静分离、数据库的调用!!!
目录 前言 一、nfs共享存储,为两个节点服务器提供静态网页共享 二、nginx作为lvs的后端节点服务器,完成lo:0网卡配置,以及内核参数设置,还有设置路由表 步骤一:先完成nfs共享存储挂载 步骤二:完成lo:0网…...
jmx_exporter安装
下载 wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.13.0/jmx_prometheus_javaagent-0.13.0.jar 创建jmx_exporter.yml文件 文件内容为: rules: - pattern: ".*" 配置tomcatpinter/apache-tomcat-8.5.38/bin/ca…...
怎么给自己的微信公众号留言?
为什么公众号没有留言功能?根据要求,自2018年2月12日起,新申请的微信公众号默认无留言功能。有些人听过一个说法:公众号粉丝累计到一定程度或者原创文章数量累计到一定程度就可以开通留言功能。其实这个方法是2018年之前才可以&am…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
