C++ 経由でexplorer.exeを起動するにはどうすればよいですか?
-
21-08-2019 - |
質問
プログラムでexplorer.exeを起動しようとしていますが、うまくいきません。
これは私のコードです:
cout << pName << "died, lets restart it." << endl;
STARTUPINFO startupInfo = {0};
startupInfo.cb = sizeof(startupInfo);
PROCESS_INFORMATION processInformation;
if(CreateProcess(pName, NULL, NULL, NULL, false, NORMAL_PRIORITY_CLASS, NULL, NULL, &startupInfo, &processInformation) == 0){
cout << "Error starting " << pName << ": " << GetLastError() << endl;
}
pNameはexplorer.exeです
誰かが私が間違っていることを教えてもらえますか?エラーコード「2」が表示されます。 ERROR_FILE_NOT_FOUND
解決
最初のパラメータはアプリケーション名です。2 番目はコマンドラインです。2 番目のパラメータとして「explorer.exe」を指定してみてください。
これを参照してください MSDN の記事:
lpApplicationName [入力、オプション]
実行されるモジュールの名前。このモジュールは、Windowsベースの アプリケーション。他のタイプでもかまいません モジュール(MS-DOSや OS/2) (適切なサブシステムが ローカル コンピューターで使用できます。
文字列にはフルパスを指定できます 実行するモジュールのファイル名 または、名前の一部を指定することもできます。で 部分的な名前の場合、 関数は現在のドライブを使用し、 現在のディレクトリに 仕様。 この関数は、 検索パスを使用する. 。このパラメータは、 ファイル名拡張子を含める必要があります。デフォルトの拡張子は想定されません。
他のヒント
あなたはおそらく、「 ShellExecuteExをに与える必要があります「試してみます。この機能を使用すると、のそれをどうするかについて説明しているまたはのフォルダと動詞のファイルを指定することができます。あなたがの動詞のよう "explore
" を使用している場合、それは与えられたのフォルダの
方法に関する関連情報を見つけるのは驚くほど難しいです 確実に Windows エクスプローラーを再起動します。64 ビット Windows 7/8 では、ShellExecute メソッドが正しく機能せず、ファイルのコピーやアイコン オーバーレイが完全に壊れるなどの事態が発生します。
最も信頼できる方法は、stdlib.h システム コールを使用することです。
system("start explorer");
エクスプローラーをシャットダウンして再起動しようとしている場合は、プログラムで AutoRestartShell レジストリ キーを無効にすることをお勧めします。これにより、エクスプローラーを制御できなくなります。 いつ エクスプローラーが再起動されます。