首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何确定.exe是否在c ++中运行?

要确定一个.exe文件是否在C++中运行,可以使用以下方法:

  1. 使用CreateProcess函数:

CreateProcess函数可以创建一个新的进程,并运行指定的可执行文件。在创建进程时,可以通过设置CREATE_SUSPENDED标志来暂停进程的执行,从而确定.exe文件是否在C++中运行。

示例代码:

代码语言:c++
复制
#include<Windows.h>
#include<iostream>

int main() {
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));

    // 创建进程
    if (!CreateProcess("path_to_exe_file", NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi)) {
        std::cout << "CreateProcess failed."<< std::endl;
        return 0;
    }

    // 确认进程是否在运行
    DWORD exitCode;
    GetExitCodeProcess(pi.hProcess, &exitCode);
    if (exitCode == STILL_ACTIVE) {
        std::cout << ".exe文件正在运行。"<< std::endl;
    } else {
        std::cout << ".exe文件未运行。"<< std::endl;
    }

    // 恢复进程执行
    ResumeThread(pi.hThread);

    // 关闭进程和线程句柄
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

    return 0;
}
  1. 使用ShellExecuteEx函数:

ShellExecuteEx函数可以运行指定的可执行文件,并返回一个SHELLEXECUTEINFO结构体,其中包含有关执行操作的信息。可以通过检查hProcess成员来确定.exe文件是否在C++中运行。

示例代码:

代码语言:c++
复制
#include<Windows.h>
#include<iostream>
#include <Shellapi.h>

int main() {
    SHELLEXECUTEINFO sei;
    ZeroMemory(&sei, sizeof(sei));
    sei.cbSize = sizeof(sei);
    sei.fMask = SEE_MASK_NOCLOSEPROCESS;
    sei.lpFile = "path_to_exe_file";
    sei.nShow = SW_SHOW;

    // 运行.exe文件
    if (!ShellExecuteEx(&sei)) {
        std::cout << "ShellExecuteEx failed."<< std::endl;
        return 0;
    }

    // 确认进程是否在运行
    DWORD exitCode;
    GetExitCodeProcess(sei.hProcess, &exitCode);
    if (exitCode == STILL_ACTIVE) {
        std::cout << ".exe文件正在运行。"<< std::endl;
    } else {
        std::cout << ".exe文件未运行。"<< std::endl;
    }

    // 关闭进程句柄
    CloseHandle(sei.hProcess);

    return 0;
}

这两种方法都可以用于确定.exe文件是否在C++中运行。使用CreateProcess函数可以在进程创建时暂停进程执行,从而确定进程是否在运行。而使用ShellExecuteEx函数则可以直接运行.exe文件,并通过检查hProcess成员来确定进程是否在运行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

在C中,如何知道动态分配是否成功

mallco是分配虚拟内存 C语言使用 malloc函数动态在堆上分配内存。malloc根据字节数的参数。如果无法分配内存,该函数将返回指向已分配内存的指针或 NULL 指针。...因此,依靠 malloc 确定分配是否成功是一个困难的问题。只有在写入和读取新分配的内存时才能发现。...或者使用 mmap & mlock 来验证分配是否成功,但该进程仍然可以随时因任何原因被 OOM 杀死。 在 macOS 上也是如此。...由于fork在 Unix 上非常普遍,因此很快就需要过度使用。否则,fork/exec 将停止在任何使用超过一半系统内存的进程中工作。 这就是 Linux 所做的。...对于使用它们的每个进程,共享库可能会同时计入实内存和虚拟内存中,即使它们占用相同页面的只读或写时复制内存,并且内存映射文件可能会被全部计入在虚拟内存中,即使只有一小部分文件被读取,并且在 Linux 上

2.7K20
  • 如何确定恶意软件是否在自己的电脑中执行过?

    默认设置下,它会在预读取文件(存储路径为”C:\WindowsPrefetch”)中存储最近执行的128个文件的信息。...因为如果要确定一个文件是否执行过,我们只需要检查几个重要的注册表键即可: 1. ShimCache 微软使用了ShimCache或“AppCompatCache”来识别应用程序的兼容性问题。...日志文件 为了确定一个文件是否执行过,我们还可以根据日志文件的分析结果来判断。首先我们来看一看Windows System Event Log(系统事件日志),因为这个日志文件记录了服务的启动信息。.../Operational”日志中: 最后,如果一个程序崩溃了,那么Dr.Watson日志可以记录下恶意任务的运行信息: 文件功能 另一种判断文件是否运行过的方法就是寻找可疑的输出文件。...下表中显示的是我们在浏览器历史纪录中捕捉到的样本,这个后门样本使用了两种通讯机制: 想要判断恶意文件是否执行过,我们可以分析文件的功能并在磁盘中寻找相应功能的运行结果/证据。

    1.4K50

    RabbitMQ是如何确定消息是否投递到队列中的

    前言 在使用RabbitMQ消息中间件时,因为消息的投递是异步的,默认情况下,RabbitMQ会删除那些无法路由的消息。为了能够检出消息是否顺利投递到队列,我们需要相应的处理机制。...在Spring Boot中需要开启: spring: rabbitmq: # 通常选择 correlated publisher-confirm-type: 通常有三种选择: NONE...在Spring Boot中需要同时开启: spring: rabbitmq: publisher-returns: true template: mandatory: true...总结 消息投递失败的处理在使用RabbitMQ的使用中时非常必要的,能够帮助我们追踪消息的投递情况,以及处理消息投递异常或者成功后的逻辑处理,为消息丢失进行一些兜底或者记录。...但是请注意这个并不是发生在消费阶段,是否成功消费并不是由这两种回调来处理,我们有空再对消息的消费确认进行讲解。多多关注:码农小胖哥 获取更多的编程干货。

    2.7K40

    在 Python 中确定一个数字是否等于 0,考虑精度问题

    在 Python 中,特别是在处理浮点数时,确定一个数字是否等于 0 时,必须考虑精度问题。由于计算机使用二进制表示数字,浮点运算可能会引入微小的误差。...这意味着,尽管在整数上运行良好,但使用 == 进行直接比较时,浮点数可能无法达到预期效果。 下面是在 Python 中检查一个数字是否实际为零的详细方法,该数字可以是整数、浮点数或其他数值类型。...处理浮点数 在处理浮点数时,我们使用一个容差水平(指的是一种衡量系统容忍误差程度的度量)来检查数字是否足够接近零。这种方法考虑到可能存在的精度问题。...用于比较:在比较两个数字是否相等时(不仅限于与零比较),您可以考虑使用类似的方法,检查它们之间的绝对差是否在一定的容差范围内。...本文介绍的方法为在 Python 中确定不同数值类型和使用情况下一个数字是否有效等于零提供了一种强大而灵活的方式。

    27100

    在Java中如何高效判断数组中是否包含某个元素

    原文作者:Hollis_Chuang 原文地址:http://www.hollischuang.com/archives/1269 如何检查一个数组(无序)是否包含一个特定的值?...这是一个在Java中经常用到的并且非常有用的操作。同时,这个问题在Stack Overflow中也是一个非常热门的问题。...在投票比较高的几个答案中给出了几种不同的方法,但是他们的时间复杂度也是各不相同的。本文将分析几种常见用法及其时间成本。...查找有序数组中是否包含某个值的用法如下: public static boolean useArraysBinarySearch(String[] arr, String targetValue) {...实际上,如果你需要借助数组或者集合类高效地检查数组中是否包含特定值,一个已排序的列表或树可以做到时间复杂度为O(log(n)),hashset可以达到O(1)。

    5.2K10

    在mac电脑的terminal里该如何运行c语言

    若要在 Mac 的终端中编译并运行 C 源代码,你首先需要安装 Command Line Tools,里面包含有 GCC 编译器。安装方法为: 打开终端,输入 gcc。...安装完成后,定位至你需要编译的 C 源代码所在目录,即使用 cd 命令,例如我现在在根目录下,我的 C 代码位于 ~/Desktop/Self/C 文件夹中,我便可以在终端中输入以下命令,来跳转到我 C...例如,我要编译的文件叫 dot.c,那么就在终端中输入 1 gcc -Wall -g -o dot dot.c 其中,-Wall 代表编译器在编译过程中会输出警告信息(Warning...我这里是 dot.c。注意加上后缀 .c。 输入完毕后按回车,如果编译没有任何问题,不会有任何提示。如果有问题,编译器会提示你问题是什么,在源代码的什么位置。如图所示: ?...在终端中输入 ./可执行文件的名称 即可执行你的程序。例如,我输入 1 ./dot 后,就可以执行程序了。

    5.8K20

    如何使用 TSX 在 Node.js 中本地运行 TypeScript

    但我们可以在Node.js中直接运行TypeScript文件而无需任何编译步骤,这称为加载器(Loaders)。...这两个软件包都是加载器,它们接收运行时加载的文件,并对其执行操作,在我们的情况下,操作是将TypeScript文件编译为JavaScript。...最有趣的部分是,TSX被开发为Node的完整替代品,因此您实际上可以将TSX用作TypeScript REPL,只需使用npm i -g tsx全局安装它,在终端中运行tsx,然后就可以原生地编写TSX...TSX作为加载器通过加载器运行一个文件(或所有文件)很简单,只需在package.json中创建一个启动脚本,并使用以下内容:"scripts": { "start": "node --loader...扩展功能自Node 20.6版本以来,我们可以直接加载.env文件中存在的环境配置文件。但如何同时使用加载器和配置文件呢?

    2.7K10

    Stream 在 C# 中是如何工作的?

    流是 C# 中的一个基本概念,用于处理可能需要一些时间才能完成的大量数据、网络通信和文件 I/O 操作。...在 C# 中使用 Stream 读取文件内容 下面是使用 C# 中的 FileStream 类从文件中读取数据的示例。...因此,即使文件尚未读取,我们也会将内容打印到屏幕中。 处理流位置和冲洗 如果需要重置流的位置,可以检查 CanSeek 是否_为 true_。...C# 中不同类型的流 虽然此示例使用 _FileStream_,但 C# 提供了各种流实现,包括: 内存流: 将数据存储在内存中,对于临时存储和不需要磁盘写入的操作非常有用。...每种流类型都有独特的特性,使其适用于 C# 应用程序中的不同场景。选择流时,请考虑数据源、性能要求以及是否需要查找等因素。

    12110
    领券