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 を起動し、新しいプロセスを作成することができます。アプリケーションは、呼び出し元のアプリケーションから独立して実行されます。

私のプロジェクトの1つで使用した例を次に示します。

#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 );
}

EDIT:あなたが得ているエラーは、名前だけでなく.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 に答える
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 に答える