C++ 一生运行一次的代码
我正在尝试制作一个程序,将选定的文件与硬盘驱动器序列号关联,这样它就不会在任何其他硬盘驱动器上运行。我必须设置硬盘序列号的部分在程序的生命周期中只能运行一次C++ 一生运行一次的代码,c++,windows,visual-studio-2017,C++,Windows,Visual Studio 2017,我正在尝试制作一个程序,将选定的文件与硬盘驱动器序列号关联,这样它就不会在任何其他硬盘驱动器上运行。我必须设置硬盘序列号的部分在程序的生命周期中只能运行一次 #include <mutex> #include <iostream> void set_serial_number() { static std::once_flag flag1; std::call_once(flag1, [](){ std::cout << "Set hard d
#include <mutex>
#include <iostream>
void set_serial_number()
{
static std::once_flag flag1;
std::call_once(flag1, [](){ std::cout << "Set hard drive serial number\n"; });
}
我不知道如何实现这一点,互联网上的解决方案使用宏,我不熟悉宏。我希望使用visual studio 2017和Windows 10实现此功能。在程序期间只运行一次
#include <mutex>
#include <iostream>
void set_serial_number()
{
static std::once_flag flag1;
std::call_once(flag1, [](){ std::cout << "Set hard drive serial number\n"; });
}
输出:
设置硬盘驱动器序列号
静态函数/类成员保证只存在一次。大概是
class myThing {
public:
static const std::string hardDiskId;
private:
std::string queryHardDiskId();
};
const std::string myThing::hardDiskId = queryHardDiskId();
将确保只查询一次您的硬盘id。您可以在磁盘上创建一个文件,并将附加了一些其他数据的序列号字符串哈希写入文件,然后在下次运行程序时读取。您可以为此使用openssl
#include <openssl/sha.h>
...
string tohash = serial + "secret_suffix";
unsigned char hash[SHA_DIGEST_LENGTH]; // == 20
SHA1(to_hash.c_str(), to_hash.length(), hash);
write_to_file(hash);
#包括
...
字符串tohash=serial+“secret\u后缀”;
无符号字符哈希[SHA_DIGEST_LENGTH];/==20
SHA1(to_hash.c_str(),to_hash.length(),hash);
将_写入_文件(散列);
您可以在安装应用程序时运行此操作。您的任务可以拆分为几个独立的子任务。你对哪些方面有问题?到目前为止你想到了什么?如果有人克隆了你的硬盘会怎么样?可执行文件是否只运行“一次”?我希望您没有试图用这种机制保护有价值的东西。黑客需要几个小时才能反汇编您的程序,找到函数“IsTheRightSerialNumber?”,并进行修改以始终返回true。可能会重复“在程序生命周期内仅运行一次”这一说法-不明确,哪个生命周期:当前执行生命周期,或发布/发布版本生命周期。。。如果“程序”启动时“选定文件”已经存在,程序应该怎么做?a) 确认并在何时进行正常操作?b) 确认和何时退出与错误通知不匹配?c) 否则,它将在程序中执行一次lifetime@BishoyYouhanna:是的。
set\U serial\U number
中包含的once\U标志
是静态的
,这意味着在程序期间只有一个标志,它还存储一些状态(例如,布尔跟踪是否在之前的通话中使用过)。非常感谢你,不知道我是怎么错过的