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

时间:2013-03-15 15:19:23

标签: c++ windows exe

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

这是我的代码:

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

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

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

6 个答案:

答案 0 :(得分:63)

您应始终避免使用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可能不存在。

答案 1 :(得分:14)

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

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

int main() {
    ShellExecute(NULL, "open", "path\\to\\file.exe", NULL, NULL, SW_SHOWDEFAULT);
}

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

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

答案 2 :(得分:3)

试试这个:

#include <windows.h>

int main ()

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

    return 0 ;
}

答案 3 :(得分:1)

提供文件'openfile.exe'的完整路径 并且记住不要在路径中提出斜杠'/' C:/用户/用户名/等.... 而不是那种用途 C:\ Users \用户名\等 (对于Windows)

可能会帮助你

答案 4 :(得分:0)

您收到此错误是因为您未提供完整路径。 (C:\用户\ file.exe程式) 如果要删除此错误,请提供完整路径或将该应用程序(您要打开)复制到项目(.exe)存在/保存的文件夹中。

#include <windows.h>
using namespace std;
int main()
{
  system ("start C:\\Users\\Folder\\chrome.exe https://www.stackoverflow.com"); //for opening stackoverflow through google chrome , if chorme.exe is in that folder..
  return 0;
}

答案 5 :(得分:0)

当可执行路径在系统调用中有空格时!

#include<iostream>
using namespace std;
main()
{
    system("explorer C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe ");
    system("pause");
}