Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;防止手动执行程序_C++ - Fatal编程技术网

C++ C++;防止手动执行程序

C++ C++;防止手动执行程序,c++,C++,我的问题是我有2个.exe文件(MainGUI及其更新程序)。我只希望通过主程序执行update.exe,而不是双击它。 有没有一个众所周知的方法来实现这一点? 我的想法是,程序检查它是否使用argc=0执行,如果是,它只是终止,但您仍然可以使用自己的参数打开它 我不知道什么是众所周知的,但是命令行上的任何东西都很容易处理;在某种程度上,这一切都取决于你的决心 1) 父对象在环境中放置一个魔术字符串,执行子更新程序,该更新程序期望找到该魔术字符串,如果没有,则拒绝运行 2) 子级可以验证其父级是

我的问题是我有2个
.exe
文件(
MainGUI
及其更新程序)。我只希望通过
主程序执行
update.exe
,而不是双击它。 有没有一个众所周知的方法来实现这一点?
我的想法是,程序检查它是否使用
argc=0执行,如果是,它只是终止,但您仍然可以使用自己的参数打开它

我不知道什么是众所周知的,但是命令行上的任何东西都很容易处理;在某种程度上,这一切都取决于你的决心

1) 父对象在环境中放置一个魔术字符串,执行子更新程序,该更新程序期望找到该魔术字符串,如果没有,则拒绝运行

2) 子级可以验证其父级是否为MainGUI可执行文件;有用于此的流程帮助器API

3) 父MainGUI创建一个管道,在命令行上用句柄的数值启动子级,然后父级写入更新程序运行所需的一些关键数据(我不知道,实际更新内容,版本信息,不确定)。如果子更新程序发现任何问题,将拒绝运行


当然还有其他方法,尽管要打败一个真正有决心的人是很困难的。

我不知道什么是众所周知的,但命令行上的任何东西都很容易解决;在某种程度上,这一切都取决于你的决心

1) 父对象在环境中放置一个魔术字符串,执行子更新程序,该更新程序期望找到该魔术字符串,如果没有,则拒绝运行

2) 子级可以验证其父级是否为MainGUI可执行文件;有用于此的流程帮助器API

3) 父MainGUI创建一个管道,在命令行上用句柄的数值启动子级,然后父级写入更新程序运行所需的一些关键数据(我不知道,实际更新内容,版本信息,不确定)。如果子更新程序发现任何问题,将拒绝运行


当然还有其他方法,尽管要打败真正有决心的人是很难的。

我的意思是argc=1而不是0,因为参数向量[0]是程序的名称,您可以使用一天中的时间加上或减去1秒。您可以获取中描述的父进程ID,并检查它是否是“主程序”。假设您只想阻止随意双击EXE,则强制使用命令行参数是标准解决方案。我唯一的建议是给我们一个特定的命令行(例如,
/run
),而不是只检查
argc>1
Unrelated:小心,因为
argv[0]
通常不是程序名。这是命令,路径和所有。如果涉及到符号链接,您可能会被误导。另一种常见的替代方法,特别是在裸机嵌入式系统中,是空字符串。我的意思是argc=1而不是0,因为参数向量[0]是程序的名称,您可以使用一天中的时间加上或减去1秒。您可以获取如中所述的父进程ID,并检查它是否是“主程序”。假设您只想阻止随意双击EXE,则强制使用命令行参数是标准解决方案。我唯一的建议是给我们一个特定的命令行(例如,
/run
),而不是只检查
argc>1
Unrelated:小心,因为
argv[0]
通常不是程序名。这是命令,路径和所有。如果涉及到符号链接,您可能会被误导。另一种常见的替代方法,尤其是在裸金属嵌入式系统中,是空字符串。