无论我运行同一应用程序多少次,应用程序(.exe)中的函数都应该只调用一次



假设有两个函数,一个用于打印"你好";以及其它要打印的";世界;我在主函数中调用这两个函数。现在,当我编译它时,它将创建一个.exe文件。当我第一次运行这个.exe时,两个函数都将打印";你好世界";。此.exe已终止。

但是,如果我第二次或多次运行相同的.exe,则只有一个函数必须执行,即它应该只打印";世界";。我想要一段只运行一次的代码或函数,在那之后,它应该自我销毁,无论我运行应用程序(.exe(多少次,都不应该再次执行

我可以通过访问本地或windows注册表来实现这一点,并一次性写入一些值,然后可以检查该值是否存在,无需执行这段代码或函数。

我是否可以在没有任何外部帮助的情况下实现应用程序本身应该能够执行这种行为?欢迎提出任何想法。感谢阅读

在不需要使用某种外部资源的情况下,没有连贯或可移植的方法1从软件中做到这一点。

问题是,您希望此进程的调用知道它执行的次数,但它执行的时间不是记录在2任何地方的属性。程序本身没有以前执行的内存,除非你对它进行编程

最好的办法是在某个规范化的位置写出这些信息,以便在以后的执行中读取。这可以是文件系统中的一个文件(例如隐藏的.firstrun文件或其他文件(,也可以是通过注册表(特定于Windows(或其他特定于环境的通信形式。

最重要的是,这必须在执行之间持续存在,并可用于您的流程。


1可能会在第一次调用后编写覆盖可执行文件本身的代码,但这非常脆弱,并且将高度特定于可执行文件格式。这不是解决这个问题的理想方法,也不是推荐的方法。

2这不是C或C++标准中定义的功能。可能有一些专门的操作系统/linux版本允许对此进行查询,但这在大多数通用操作系统中是看不到的。通常,这种方法是通过外部资源进行沟通。

我能在没有任何外部帮助的情况下实现它吗应该能够执行这种行为吗?

无论如何都不是由C或C++定义的,而且可能根本不在Windows上。

你必须以某种方式,在某个地方纪念一次性函数被调用的事实。如果除了编译的程序之外什么都没有,那么唯一的选择就是修改程序。C和C++都不提供对正在运行的程序的实时修改,更不用说将其写回包含其映像的可执行文件了。

可以想象,如果程序知道在哪里找到或如何重新创建自己的源代码,并且知道如何运行编译器,那么它就可以编译自己的修改版本。然而,在Windows上,它很可能无法在运行时覆盖自己的可执行文件(尽管在其他各种操作系统上也可能如此(,因此这并不能解决问题。

此外,请注意,任何涉及修改可执行文件的方法都至少有点不稳定,因为程序的不同副本对一次性函数是否已运行有自己的半独立想法。

基本上,没有。

最新更新