5

プログラムで 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

4

3 に答える 3

4

最初のパラメーターはアプリケーション名です。2番目はコマンドラインです。2番目のパラメーターとして「explorer.exe」を指定してみてください。

このMSDNの記事を参照してください:

lpApplicationName [in、オプション]

実行するモジュールの名前。このモジュールは、Windowsベースのアプリケーションにすることができます。ローカルコンピュータで適切なサブシステムが利用できる場合は、他のタイプのモジュール(たとえば、MS-DOSまたはOS / 2)にすることができます。

文字列は、実行するモジュールのフルパスとファイル名を指定することも、部分的な名前を指定することもできます。部分的な名前の場合、関数は現在のドライブと現在のディレクトリを使用して指定を完了します。関数は検索パスを使用しません。このパラメーターには、ファイル名拡張子を含める必要があります。デフォルトの拡張子は想定されていません。

于 2009-05-14T20:02:21.223 に答える
3

ShellExecuteEx」を試してみてください。この関数を使用すると、ファイルまたはフォルダーと、その処理方法を説明する動詞を指定できます。動詞exploreとして ""を使用すると、指定されたフォルダで Windows エクスプローラが開きます。

于 2009-05-15T03:37:38.383 に答える
0

Windows エクスプローラーを確実に再起動する方法に関する関連情報を見つけるのは驚くほど困難です。64 ビットの Windows 7/8 では、ShellExecute メソッドが正しく機能せず、ファイルのコピーやアイコン オーバーレイが完全に壊れるなどの問題が発生します。

最も信頼できる方法は、stdlib.h システム コールを使用するようです。

system("start explorer");

エクスプローラーをシャットダウンして再起動しようとしている場合は、AutoRestartShell レジストリ キーをプログラムで無効にすることをお勧めします。これによりエクスプローラーの再起動を制御できなくなります。

于 2014-12-22T18:02:45.343 に答える