首页
学习
活动
专区
工具
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.2K50

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

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

2.6K40

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

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

6400

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.1K10

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.5K20

如何使用 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文件存在的环境配置文件。但如何同时使用加载器和配置文件呢?

1.4K10
领券