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

S.Y*_*S.Y 36 c++ windows exe

我想要做的是从另一个.exe打开一个.exe.我真的不知道该怎么做,所以我搜索了互联网.我从互联网上尝试了一些建议的方法,但它没有用.

这是我的代码:

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

int main()
{
    system ("OpenFile.exe");
    system ("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我在DEV C++中运行它时,它没有编译,我收到一个错误.有人可以帮帮我吗?

Jon*_*ona 69

你应该总是避免使用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 );
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我包含了 `windows.h` 头文件来完成代码 (3认同)
  • 我认为你必须将函数从void更改为bool,并根据CreateProcess()的成功返回true/false (3认同)
  • 同样在这里。这很令人困惑。@iBug 你能澄清一下 char argv[1] 实际上是什么吗?我假设命令行参数? (2认同)

小智 17

我在这方面取得了很大的成功:

#include <iostream>
#include <windows.h>

int main() {
    ShellExecute(NULL, "open", "path\\to\\file.exe", NULL, NULL, SW_SHOWDEFAULT);
}
Run Code Online (Sandbox Code Playgroud)

如果您有兴趣,请填写完整的文档:

http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx.

  • @Michael 这是个人意见 - 验证是什么?我认为事实恰恰相反,原因如下: 1. ShellExecute 是操作系统功能,可以得到适当的保护。2. ShellExecute 当然更简单,并且可能不会随着时间的推移而改变太多。CreateProcess - 您应该使用 CreateProcessEx 才能“正确”。3. CreateProcess的使用有很多含糊之处,对于新用户来说,安全性和标志设置并不明显。我实际上不确定 CreateProcess 有什么具体好处?请解释你的理由。 (2认同)

小智 5

尝试这个:

#include <windows.h>

int main ()

{
    system ("start notepad.exe") // As an example. Change [notepad] to any executable file //

    return 0 ;
}
Run Code Online (Sandbox Code Playgroud)

  • 您能否解释此代码为何回答问题的解释?纯代码的答案是[discouraged](http://meta.stackexchange.com/q/148272/274165),因为它们没有教导解决方案。 (3认同)