50

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

这是我的代码:

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

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

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

4

7 回答 7

90

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

于 2013-03-15T18:53:00.307 回答
23

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

#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

于 2014-09-17T04:02:40.493 回答
5

尝试这个:

#include <windows.h>

int main ()

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

    return 0 ;
}
于 2015-07-16T02:35:46.380 回答
1

您收到此错误是因为您没有提供完整路径。(C:\Users...\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;
}
于 2015-02-16T16:52:10.280 回答
1

提供文件的完整路径,openfile.exe 记住不要在路径中加上斜杠/,例如 c:/users/username/etc.... 代替那个使用 c:\\Users\\username\etc (对于Windows)

可能这会对你有所帮助。

于 2016-03-14T18:08:12.967 回答
1

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

#include<iostream>
using namespace std;
int main()
{
    system("explorer C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe ");
    system("pause");
return 0;
}
于 2015-11-10T20:50:53.457 回答
0

我知道这有点晚了,但这是为了帮助所有新的 c++ 开发人员。

基本上我发现如果你将文件路径设置为该位置然后调用程序你可以绕过错误。

        cout << "Opening Firefox";
        system("cd C:\\Program Files\\Mozilla Firefox");
        Sleep(1000);
        system("start firefox.exe -P");

如您所见,我将文件路径设置为 Firefox 的位置,然后启动它。就我而言,我正在启动 Firefox 的配置文件管理器,如果您只想启动 Firefox,请删除 -P。我还输入了一个 Sleep() 让我的计算机有时间切换文件路径。如果要返回默认文件路径,请使用, system(cd C:\\Windows\\System32);. 我通过在 windows 的命令行中复制命令来做到这一点,但如果你正在使用 Linux 特定的命令 + 文件路径,你会使用它。

于 2021-09-06T15:22:07.200 回答