精华内容
下载资源
问答
  • 查看 IntelliJ IDEA 使用期限

    万次阅读 多人点赞 2018-01-23 09:35:35
    首先打开IDEA,选择上面的选项help,然后help->Register...或者help->About 看图,有图有真相

    首先打开IDEA,选择上面的选项help,然后help->Register...或者help->About

    看图,有图有真相

    展开全文
  • 设置软件使用期限

    2018-04-09 10:26:01
    vc++ 8.00 c++ winapi 设置注册表设置软件使用期限
  • Ansys万能license及详细使用说明,无使用期限,适合任何版本(测试12-17有效),帮助修复license过期等各种问题 以下操作需要管理员权限 用文档编辑器打开这个license.txt修改HOSTNAME成你的主机名(在我的电脑...
  • 有源医疗器械可实现对疾病的诊断、预防、监护治疗等功能,为了在临床使用中维持上述功能[a1],医疗器械注册申请人/注册人需确定产品的使用期限[a2]。在该期限内,除了应保证产品安全使用,也应保证产品有效使用。...

     

     

    有源医疗器械可实现对疾病的诊断、预防、监护和治疗等功能,为了在临床使用中维持上述功能[a1] ,医疗器械注册申请人/注册人需确定产品的使用期限[a2] 。在该期限内,除了应保证产品安全使用,也应保证产品有效使用。同样,在该期限内,即意味着产品采用的所有风险控制措施仍然有效,已知剩余风险依然在可接受范围内。本指导原则旨在指导研究人员分析产品使用期限,指导医疗器械注册申请人/注册人提交有源医疗器械使用期限的注册申报资料,同时指导审评人员对相关文件进行审查。[a3] 

    本指导原则是对有源医疗器

    展开全文
  • Qt设置软件的使用期限

    千次阅读 多人点赞 2020-07-29 13:03:51
    功能预览 操作流程 获取设备信息(网卡地址、硬盘序列号、主板序列号、处理器ID、BIOS序列号、CPUID等) 选择使用期限 根据设备信息、使用期限、当前日期生成唯一的 key 把key所需信息写入注册表 运行程序读取...

    作者:billy
    版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

    前言

    当我们发布商业软件时,为了获取更多的盈利,我们会设置用户使用软件的期限。比如我们给到用户的软件试用期是3个月,过期之后就无法使用了,需要向销售方支付费用,开发者给与授权之后才能继续使用。

    对于软件开发者,就博主个人而言,我是非常乐意做这种事情的。博主整理了自己项目中使用的方法,在这里分享一下,也方便自己后期回顾。

    功能预览

    在这里插入图片描述

    操作流程

    1. 获取设备信息(网卡地址、硬盘序列号、主板序列号、处理器ID、BIOS序列号、CPUID等)
    2. 选择使用期限
    3. 根据设备信息、使用期限、当前日期生成唯一的 key
    4. 把key和所需信息写入注册表
    5. 运行程序读取注册表检测是否过期,并更新日期

    封装的类 BMachineControl

    #include <QString>
    #include <QAxObject>
    #include <QDebug>
    #include <QUuid>
    #include <QNetworkInterface>
    #include <QCryptographicHash>
    #include <QDateTime>
    #include <QSettings>
    #include <QFile>
    #include <QFileInfo>
    #include <QDir>
    #include <QDataStream>
    #include <QList>
    #include <Windows.h>
    
    class BMachineControl
    {
    public:
        BMachineControl();
    
        QString getWMIHWInfo(int type);
    
        QString getCPUID1();
    
        QString getCPUID2();
    
        QString getHDLogicalID();
    
        QString getMac();
    
        QString getCPUManID();
    
        QString getInfo();
    
        // 根据设备信息、日期、可使用月份生成key
        QString getKey(QString machineinfo, QString ddMMyyyy, int months);
    
        // 注册key
        bool activeKey(QString key);
    
        // 拷贝至文件
        void copyToFile(QSettings* reg, bool magic = false);
    
        // 无注册表信息则初始化并返回true, 否则直接返回false
        bool initializeReg();
    
        // 比较是否与文件一致
        bool judgeFile();
    
        // 判断日期是否被故意修改
        bool judgeDate();
    
        // 判断key,返回剩余天数,过期则为负
        int judgeKey();
    
        // 刷新 DT1
        void refreshDT1();
    
    private:
        const QString kReg = "HKEY_CURRENT_USER\\Software\\Lenovo\\App";
        const QString kKey = "K";
        const QString kDateTime0 = "DT0";
        const QString kDateTime1 = "DT1";
        const QString kDateTime2 = "DT2";
        const QString kMonths = "M";
    
        const int kForever = 1000000;
        const QList<int> kValidity = {1, 3, 6, 12, kForever};
    
        const QString kFile = "C:/ProgramData/Lenovo/app.dat";
    };
    

    获取设备信息

    这里用到了 QAxObject 和 QNetworkInterface,记得在pro中导入Qt模块
    QT += network axcontainer

    QString BMachineControl::getWMIHWInfo(int type)
    {
        /*
         * 注意:qt调用wmi时,对查询语句要求很严格,所以like之类的句子务必精确才能有结果出来
         *
         * 1. 当前原生网卡地址
         *    SELECT MACAddress ...
         *
         * 2. 硬盘序列号
         *    SELECT PNPDeviceID ...
         *
         * 3. 获取主板序列号
         *    SELECT SerialNumber ...
         *
         * 4. 处理器ID
         *    SELECT ProcessorId ...
         *
         * 5. BIOS序列号
         *    SELECT SerialNumber ...
         *
         * 6. 主板型号
         *    SELECT Product ...
         */
    
        QString hwInfo;
        QStringList sqlCmd;
        sqlCmd.clear();
        sqlCmd << "SELECT MACAddress FROM Win32_NetworkAdapter WHERE (MACAddress IS NOT NULL) AND (NOT (PNPDeviceID LIKE 'ROOT%'))";
        sqlCmd << "SELECT PNPDeviceID FROM Win32_DiskDrive WHERE( PNPDeviceID IS NOT NULL) AND (MediaType LIKE 'Fixed%')";
        sqlCmd << "SELECT SerialNumber FROM Win32_BaseBoard WHERE (SerialNumber IS NOT NULL)";
        sqlCmd << "SELECT ProcessorId FROM Win32_Processor WHERE (ProcessorId IS NOT NULL)";
        sqlCmd << "SELECT SerialNumber FROM Win32_BIOS WHERE (SerialNumber IS NOT NULL)";
        sqlCmd << "SELECT Product FROM Win32_BaseBoard WHERE (Product IS NOT NULL)";
    
        QStringList columnName;
        columnName.clear();
        columnName << "MACAddress";
        columnName << "PNPDeviceID";
        columnName << "SerialNumber";
        columnName << "ProcessorId";
        columnName << "SerialNumber";
        columnName << "Product";
    
        QAxObject *objIWbemLocator = new QAxObject("WbemScripting.SWbemLocator");
        QAxObject *objWMIService = objIWbemLocator->querySubObject("ConnectServer(QString&,QString&)",QString("."), QString("root\\cimv2"));
        QString query;
        if ( type < sqlCmd.size() ) {
            query = sqlCmd.at(type);
        }
    
        QAxObject *objInterList = objWMIService->querySubObject("ExecQuery(QString&))", query);
        QAxObject *enum1 = objInterList->querySubObject("_NewEnum");
    
        IEnumVARIANT *enumInterface = 0;
        enum1->queryInterface(IID_IEnumVARIANT, (void**)&enumInterface);
        enumInterface->Reset();
    
        for ( int i = 0; i < objInterList->dynamicCall("Count").toInt(); ++i )
        {
            VARIANT *theItem = (VARIANT*)malloc(sizeof(VARIANT));
            if ( enumInterface->Next(1, theItem, NULL) != S_FALSE )
            {
                QAxObject *item = new QAxObject((IUnknown *)theItem->punkVal);
                if (item) {
                    if ( type<columnName.size() ) {
                        QByteArray datagram(columnName.at(type).toLatin1());
                        const char* tempConstChar = datagram.data();
                        hwInfo=item->dynamicCall(tempConstChar).toString();
                    }
                }
            }
        }
    
        return hwInfo;
    }
    

    生成key

    QString BMachineControl::getKey(QString machineinfo, QString ddMMyyyy, int months)
    {
        QString originalStr120;
        if ( machineinfo.isEmpty() ) {
            originalStr120 = QString("machineinfo") + ddMMyyyy + QString::number(months);
        } else {
            originalStr120 = machineinfo + ddMMyyyy + QString::number(months);
        }
        QCryptographicHash sha1(QCryptographicHash::Sha1);
    
        QByteArray datagram(originalStr120.toLatin1());
    
        for ( int i = 0; i != datagram.size(); ++i )
        {
            datagram[i] = datagram[i] ^ 'q' ^ 'y';
        }
    
        const char* tempConstChar = datagram.data();
        sha1.addData(tempConstChar);
    
        QString activeCode = sha1.result().toHex();
    
        return activeCode;
    }
    

    在软件启动时检测是否过期

    #include "mainwindow.h"
    #include <QApplication>
    #include <QMessageBox>
    #include "bmachinecontrol.h"
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        // 读取注册表中设置的软件使用期限
        BMachineControl m_machine;
    
        if ( m_machine.initializeReg() ) {
            QMessageBox::information(nullptr, "Error", "No key !  ", QMessageBox::Ok);
            return 0;
        }
    
        if ( !m_machine.judgeFile() ) {
            QMessageBox::information(nullptr, "Error", "File Corruption !  ", QMessageBox::Ok);
            return 0;
        }
    
        if ( !m_machine.judgeDate() ) {
            QMessageBox::information(nullptr, "Error", "Invalid Key ! 0  ", QMessageBox::Ok);
            return 0;
        }
    
        int days = m_machine.judgeKey();
        if ( days == -1 ) {
            QMessageBox::information(nullptr, "Error", "Invalid Key ! -1  ", QMessageBox::Ok);
            return 0;
        } else if ( days == -2 ) {
            QMessageBox::information(nullptr, "Error", "Invalid Key ! -2  ", QMessageBox::Ok);
            return 0;
        } else {
            if (days <= 7) {
                QMessageBox::information(nullptr, "Info", "Days Remaining: " + QString::number(days) + " !  ", QMessageBox::Ok);
            }
        }
    
        m_machine.refreshDT1();
    
        MainWindow w;
        w.show();
        return a.exec();
    }
    

    清空注册表

    在这里插入图片描述

    展开全文
  • 该算法名为BDSD,用于查找满足用户所需的期限和预算约束的调度。 利用计划成功率(PSR)来证明所提出算法的有效性。 对于仿真实验,利用了随机的实际的工作流应用程序。 实验结果表明,与其他算法相比,该算法...
  • 这是一个vc6.0的控制台程序,程序可以控制用户的使用时间。
  • 新代系统使用期限密码

    千次阅读 2020-04-15 21:40:55
    新代系统使用期限密码Redisson是一个高级的分布式协调Redis客服端,能帮助用户在分布式环境中轻松实现一些Java的对象 (Bloom filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, ...

    新代系统使用期限密码Redisson是一个高级的分布式协调Redis客服端,能帮助用户在分布式环境中轻松实现一些Java的对象 (Bloom filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, ReadWriteLock, AtomicLong, CountDownLatch, Publish / Subscribe, HyperLogLog)。

    20、Jedis与Redisson对比有什么优缺点?

    Jedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持;

    Redisson实现了分布式和可扩展的Java数据结构,和Jedis相比,功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等Redis特性。Redisson的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。

    21、Redis如何设置密码及验证密码?

    设置密码:config set requirepass 123456

    授权密码:auth 123456
    22、说说Redis哈希槽的概念?

    Redis集群没有使用一致性hash,而是引入了哈希槽的概念,Redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。

    23、Redis集群的主从复制模型是怎样的?

    为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个节点都会有N-1个复制品.

    24、Redis集群会有写操作丢失吗?为什么?

    Redis并不能保证数据的强一致性,这意味这在实际中集群在特定的条件下可能会丢失写操作。

    25、Redis集群之间是如何复制的?

    异步复制

    26、Redis集群最大节点个数是多少?

    16384个。

    27、Redis集群如何选择数据库?

    Redis集群目前无法做数据库选择,默认在0数据库。

    28、怎么测试Redis的连通性?

    ping

    29、Redis中的管道有什么用?

    一次请求/响应服务器能实现处理新的请求即使旧的请求还未被响应。这样就可以将多个命令发送到服务器,而不用等待回复,最后在一个步骤中读取该答复。

    这就是管道(pipelining)新代系统使用期限密码,是一种几十年来广泛使用的技术。例如许多POP3协议已经实现支持这个功能,大大加快了从服务器下载新邮件的过程。

    30、怎么理解Redis事务?

    事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

    事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

    31、Redis事务相关的命令有哪几个?

    MULTI、EXEC、DISCARD、WATCH
    32、Redis key的过期时间和永久有效分别怎么设置?

    EXPIRE和PERSIST命令。
    33、Redis如何做内存优化?

    尽可能使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。

    比如你的web系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的key,而是应该把这个用户的所有信息存储到一张散列表里面。

    34、Redis回收进程如何工作的?

    一个客户端运行了新的命令,添加了新的数据。

    Redi检查内存使用情况,如果大于maxmemory的限制, 则根据设定好的策略进行回收。

    一个新的命令被执行,等等。

    所以我们不断地穿越内存限制的边界,通过不断达到边界然后不断地回收回到边界以下。

    如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保存到一个新的键),不用多久内存限制就会被这个内存使用量超越。

    35、Redis集群方案应该怎么做?都有哪些方案?

    1.codis。

    目前用的最多的集群方案,基本和twemproxy一致的效果,但它支持在 节点数量改变情况下,旧节点数据可恢复到新hash节点。

    2.redis cluster3.0自带的集群,特点在于他的分布式算法不是一致性hash,而是hash槽的概念,以及自身支持节点设置从节点。具体看官方文档介绍。

    3.新代系统使用期限密码,起几个毫无关联的redis实例,在代码层,对key 进行hash计算,然后去对应的redis实例操作数据。 这种方式对hash层代码要求比较高,考虑部分包括,节点失效后的替代算法方案,数据震荡后的自动脚本恢复,实例的监控,等等。

    展开全文
  • 如何查看IntelliJ IDEA 使用期限

    万次阅读 2020-01-06 11:20:24
    如何查看IntelliJ IDEA 使用期限 打开IDEA,选择上面的选项help,然后help->Register…或者help->About
  • 修改Oracle11g密码有效期的期限

    千次阅读 2017-06-26 14:12:57
    在Oracle11g默认方法安装后用户的密码有效期限默认设置为180天,180天后密码将会失效,Oracle会提示需要修改密码。 根据我工作中用到的容器是jdbc来连接Oracle数据库的。没法自动处理Oracle的这种密码错误提示,密码...
  • robotstudio延长使用期限,软件太大,如需要robotstudio软件请联系我。邮箱chang226677@qq.com,邮箱内请留言及留下你的联系方式。
  • EXE文件加壳软件可加期限和次数

    热门讨论 2012-06-16 00:44:03
    EXE文件加壳 加EXE文件的使用期限 次数 设置试用 等保护自己的利益
  • 卡巴斯基9KEY,最大有效期限2010-12
  • 【chage】修改账号或密码的有效期限 语法 chage [options] [LOGIN] 参数 -d :最近一次的修改时间 -E :过期时间 -I :非活动时间 -m :最短使用期限 -M :最长使用期限 -W :警告时间
  • 查找 IntelliJ IDEA 使用期限

    万次阅读 2018-05-27 15:07:45
    首先打开IDEA,选择上面的选项help,然后help-&amp;gt;Register…或者help-&amp;gt;About
  • 设置session的有效期限 4种方式

    千次阅读 2016-03-18 15:18:40
    有四种修改方式可以设置session的有效期限。你可以看下,应该是哪个地方设置的时间太短了,所以就过期了。1、操作系统:  步骤:开始——〉管理工具——〉Internet信息服务(IIS)管理器——〉网站——〉默认网站...
  • 查看DB2使用期限

    千次阅读 2011-11-28 14:57:03
    C:\Users\Administrator\Desktop>db2licm -l
  • 密码最短使用期限04/01/2016本文内容介绍了有关“密码最短使用期限”安全策略设置的最佳做法、位置、值、策略管理安全注意事项。参考“密码最短使用期限”****策略设置确定在系统要求用户更改密码之前可以使用该...
  • Linux修改用户密码使用期限: 用chage命令进行查看。主要用与密码失效是通过此命令来管理 [root@node2 ~ ]# chage --help Usage: chage [options] LOGIN Options: -d, --lastday LAST_DAY set date of last ...
  • 鼎鼎大名的primo ramdisk5.7无期限使用版 这个可以正常使用在win10 winxp上
  • 最新法律有效的借款合同合法的附期限借款合同样板WORD格式.docx
  • 最新借款合同的有效诉讼期关于附期限借款合同书doc新版文档.docx
  • 查看签名文件的有效期限等详细信息 命令详细介绍 keytool -list -v -alias 你的别名 -keystore XXX.keystore -storepass 密码 -keypass 密码 别名名称:你的别名创建日期: 2012-7-10类型: ...
  • 员工在十年顺延的医疗期内提出签订无固定期限劳动合同是否有效.pdf
  • 最新借款合同的有效诉讼期正式的附期限借款合同书doc精品模板.docx
  • 最新关于劳动合同有效期劳动合同书(固定期限)WORD范本可编辑.docx
  • 最新违规合同有没有法律效力附期限合同违法后还有效吗WORD最新版.docx
  • 直接将三个文件复制到/opt/pycharm-2016.3.1/bin目录下即可
  • Navicat Premium12.1.12破解各种不顺利,铜鼓了1个多小时,网上搜了一大堆,说啥的都有,有说英文版的使用注册机好使,中文版的加密算法改了,只能等等。我是采用了删除注册表的方式,相当于重新安装软件的方法了。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,494
精华内容 20,597
关键字:

使用期限和有效期限