首页 > 解决方案 > 无论我运行同一个应用程序多少次,应用程序(.exe)中的函数都应该只调用一次

问题描述

假设有两个函数,一个打印“hello”,另一个打印“world”,我在 main 函数中调用这两个函数。现在,当我编译它时,它会创建一个 .exe 文件。当我第一次运行这个 .exe时,两个函数都会打印“hello world”。这个 .exe 被终止。

但是,如果我第二次或多次运行相同的 .exe,则只需执行一个函数,即。它应该只打印“世界”。我想要一段只应该运行一次的代码或函数,之后它应该会自行销毁,并且无论我运行应用程序多少次都不应再次执行(.exe)

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

我可以在没有任何外部帮助的情况下实现它,即应用程序本身应该能够执行此行为吗?任何想法表示赞赏。谢谢阅读

标签: c++cvisual-studio

解决方案


在不需要使用某种外部资源的情况下,没有连贯的或可移植的方式1从软件中执行此操作。

问题是您希望此过程的调用知道它已执行的次数,但它已执行的次数不是记录在任何地方的属性2。除非您对其进行编程,否则程序本身不会对其先前的执行进行记忆。

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

主要的是,这必须在执行之间持续存在并且可供您的流程使用。


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

2这不是 C 或 C++ 标准中定义的功能。可能有一些专门的操作系统/Linux风格允许查询这个——但这在大多数通用操作系统中是看不到的。通常,该方法是通过外部资源进行通信。


推荐阅读