c++ - 如何从另一个 C++ .exe 打开一个 .exe?

标签 c++ windows exe

我想做的是从另一个 .exe 打开一个 .exe。我真的不知道该怎么做,所以我搜索了互联网。我尝试了一些网上推荐的方法,但没有奏效。

这是我的代码:

#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
    system ("OpenFile.exe");
    system ("pause");
    return 0;
}

当我在 DEV C++ 中运行它时,它会编译,但我得到一个错误。有人可以帮帮我吗?

最佳答案

您应该始终避免使用 system(),因为

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

您应该使用 CreateProcess() .

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

这是我在一个项目中使用的示例:

#include <windows.h>

VOID startup(LPCTSTR lpApplicationName)
{
   // additional information
   STARTUPINFO 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
  CreateProcess( lpApplicationName,   // the path
    argv[1],        // Command line
    NULL,           // Process handle not inheritable
    NULL,           // Thread handle not inheritable
    FALSE,          // Set handle inheritance to FALSE
    0,              // No creation flags
    NULL,           // Use parent's environment block
    NULL,           // Use parent's starting directory 
    &si,            // Pointer to STARTUPINFO structure
    &pi             // Pointer to PROCESS_INFORMATION structure (removed extra parentheses)
    );
    // Close process and thread handles. 
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
}

编辑:您遇到的错误是因为您需要指定 .exe 文件的路径,而不仅仅是名称。 Openfile.exe 可能不存在。

关于c++ - 如何从另一个 C++ .exe 打开一个 .exe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15435994/

相关文章:

C++ 向下转换(使用 dynamic_cast )返回 NULL?

windows - 我如何配置 TortoiseGit 以使用 Meld 进行差异、 merge 和冲突?

linux - 如何在 Linux 中使用 SHA256 对 EXE 进行签名?

java - 如何手动将 JAR 文件转换为 EXE 文件?

c++ - 将 2 个 int 值从子进程传递给父进程的方法

c# - 使用 powershell 批处理文件运行 c# exe

c++ - 如何在声明后将 NumericVector 初始化为特定大小?

c++ - 外部是否可以检测到 'end process'?

C++ - 在 unordered_map 中使用多个值作为键的最佳方式

windows - Windows Server 2008 64 位上的 7-Zip 执行权限