web-dev-qa-db-ja.com

別のC ++ .exeから.exeを開くにはどうすればよいですか?

私がやりたいのは、別の.exeから.exeを開くことです。私は本当にこれを行う方法がわからないので、インターネットを検索しました。インターネットからいくつかの推奨方法を試しましたが、うまくいきませんでした。

私のコードは次のとおりです。

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

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

DEV C++で実行するとコンパイルされず、エラーが発生します。誰か助けてくれますか?

34
S.Y

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

編集:取得しているエラーは、名前だけでなく.exeファイルのパスを指定する必要があるためです。 Openfile.exeはおそらく存在しません。

66
Jona

私はこれで大成功を収めました。

#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

16
Morpheus13

これを試して:

#include <windows.h>

int main ()

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

    return 0 ;
}
5
ILys Hdm

ファイル「openfile.exe」のフルパスを指定し、c:\ Users\username \を使用する代わりに、c:/ users/username/etc ....などのパスにスラッシュ「/」を入れないでください。など(Windows用)

これはあなたを助けるかもしれない

1
Sanjeev prasad

完全なパスを指定していないため、このエラーが発生しています。 (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;
}
0
udit043

実行可能パスにシステムコールに空白がある場合

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