如何在 Windows 中从 C++ 程序执行另一个 exe

2024-03-07

我希望我的 C++ 程序在 Windows 中执行另一个 .exe。我该怎么做?我使用的是 Visual C++ 2010。

这是我的代码

#include "stdafx.h"
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    unsigned int input;
    cout << "Enter 1 to execute program." << endl;
    cin >> input;
    if(input == 1) /*execute program here*/;
    return 0;
}

这是我之前在寻找答案时发现的解决方案。
它指出您应该始终避免使用 system() 因为:

  • 资源消耗大
  • 它破坏了安全性——你不知道这是一个有效的命令,或者在每个系统上都做同样的事情,你甚至可以启动你不打算启动的程序。危险在于,当您直接执行程序时,它会获得与您的程序相同的权限 - 这意味着,例如,如果您以系统管理员身份运行,那么您刚刚无意执行的恶意程序也会以系统管理员身份运行。
  • 防病毒程序讨厌它,您的程序可能会被标记为病毒。

相反,可以使用 CreateProcess()。
Createprocess() 用于启动 .exe 并为其创建一个新进程。该应用程序将独立于调用应用程序运行。

#include <Windows.h>

void startup(LPCSTR lpApplicationName)
{
    // additional information
    STARTUPINFOA si;
    PROCESS_INFORMATION pi;

    // set the size of the structures
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));

    // start the program up
    CreateProcessA
    (
        lpApplicationName,   // the path
        argv[1],                // Command line
        NULL,                   // Process handle not inheritable
        NULL,                   // Thread handle not inheritable
        FALSE,                  // Set handle inheritance to FALSE
        CREATE_NEW_CONSOLE,     // Opens file in a separate console
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi           // Pointer to PROCESS_INFORMATION structure
    );
        // Close process and thread handles. 
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Windows 中从 C++ 程序执行另一个 exe 的相关文章

随机推荐

  • CSS 属性开头的 *+ 是什么意思? [复制]

    这个问题在这里已经有答案了 我在 CSS 声明代码中发现了这一点 我现在部分负责 margin 0 0 0 10px margin 4px 0 0 10px margin 3px 0 0 10px 0 the and 0 是我特别关注的 这
  • 为什么 FoldBack 的签名与 F# 中的 Fold 有如此大的不同?

    至少有两件事我不明白 从左侧折叠到右侧折叠的重构不仅需要在签名上进行大量更改 而且在每个地方都需要进行大量更改 具体取决于文件夹功能 没有办法在不翻转参数的情况下将其链接到列表 List foldBack T gt State gt Sta
  • C# 使用通配符复制多个文件并保留文件名

    我需要使用不包含完整信息的文本文件从目录复制多个文件 NCR txt Red 目标目录中有 红1 txt红3 txt红44 txt dest 目录需要有 红1 txt红3 txt红44 txt 我的代码 System IO Director
  • 组内的 Nexus REST API 查询工件

    我有一个 Nexus maven 存储库 我想利用 REST API 来查询我的特定组中的工件列表 我偶然发现了这个文档 但它似乎非常简洁 我找不到我需要的东西 https oss sonatype org nexus restlet1x
  • 使用 Keras 创建自定义条件指标

    我正在尝试使用 keras 为我的神经网络创建以下指标 自定义 Keras 指标 https i stack imgur com fSg0o png 其中 d y pred y true y pred 和 y true 都是向量 使用以下代
  • 在 Pipeline sklearn (Python) 中使用多个自定义类

    我尝试为学生做一个关于 Pipeline 的教程 但我阻止了 我不是专家 但我正在努力改进 所以谢谢你的包容 事实上 我尝试在管道中执行几个步骤来为分类器准备数据帧 第 1 步 数据框的描述 第 2 步 填充 NaN 值 第 3 步 将分类
  • 从hosts文件中获取主机名

    我想从我的模板中获取另一台主机 鉴于以下情况hosts file vm vm hostname monitoring monitoring hostname 我怎样才能访问monitoring hostname从模板 I tried mon
  • 如何使用 jpa/hibernate 在 playframework 子模块中保存模型实体

    我在 PLAY FRAMEWORK 中有一个项目 其中包含几个子模块 每个子模块都有这样的文件夹结构 app controllers models views conf submodulename routes build sbt 我想将所
  • FFMpeg 错误 av_interleaved_write_frame():

    这是我的代码 运行php代码后 FFmpeg version 0 5 Copyright c 2000 2009 Fabrice Bellard et al configuration prefix usr libdir usr lib s
  • ASP.NET 的密码强度控制

    我需要 ASP NET 的密码强度控制 我查看了ajax控制工具包中的控制 但它不是完全可配置的 我需要将它静态地放置在布局上 尝试使用谷歌 Google 密码强度 APIhttp www codeproject com KB ajax G
  • MVC3 - 文件下载 - 等待状态指示器

    好的 我已经完成了作业并发现了类似的线程 然而 我还没有找到好的答案 使用 MVC3 C Razor 视图引擎 我的场景非常简单 我有一个带有调用控制器上的操作的链接的视图 该操作返回动态生成的文件 该过程持续 1 到 10 秒 在此期间
  • 使用 linq 查询输出列表/其他数据结构

    有没有办法在通用集合上执行 Console WriteLine 例子 列表 a 有 a Key 0 apple a Value 0 1 a Key 1 bold a Value 2 2 有没有办法使用 LINQ 写出列表内容 键 值 a a
  • 在 matplotlib 中实现水平图

    我正在尝试在 matplotlib 中实现地平线图 请参阅 http square github com cubism http square github com cubism 基本思想是 您以窄长宽比显示时间序列 并且随着值的增加 超出
  • 更改 CLLocation 的坐标

    我是 Objective C 的新手 所以这可能是一个小问题 初始化位置后 CLLocation currentPoint CLLocation alloc initWithLatitude 0 longitude 0 以后如何更改纬度和经
  • XMLHttpRequest 无法加载 跨源请求仅支持 HTTP

    从 XML 文件获取数据时发现异常 101 XMLHttpRequest 无法加载 file C Users zaid Desktop xml cd catalog xml 仅 HTTP 支持跨源请求
  • 在 Unix 中编译并运行 java(来自 Windows)

    好的 这可以在 Windows 上运行 我的 Java 应用程序正在正常运行和运行 javac classpath ojdbc14 jar g foo java java classpath ojdbc14 jar foo 然而 当我在 U
  • 在 MVC 的部分视图中创建 DropDownListFor

    我创建了一个显示下拉列表的部分视图 html DropDownListFor m gt m SelectOption Model SelectOption 我收到对象未引用实例的错误 如果我将上面的代码放入我的视图 aspx 中 它可以正常
  • 如何使用 Swift 访问 tabBarController 中的 ObjectAtIndex?

    我曾经在 obj c 中说过 self tabBarController viewControllers objectAtIndex 1 但现在很快就不再有 ObjectAtIndex self tabBarController viewC
  • 进程存在,退出代码为 255

    IIS 7 5 Windows 7 Visual Studio 2012 我试图让我的 MVC 应用程序运行位于同一台计算机上的外部命令行工具 我对包含该工具的整个文件夹具有 IIS IUSRS 的执行权限 我用以下方式调用它 Proces
  • 如何在 Windows 中从 C++ 程序执行另一个 exe

    我希望我的 C 程序在 Windows 中执行另一个 exe 我该怎么做 我使用的是 Visual C 2010 这是我的代码 include stdafx h include