2

Windows 7 でエクスプローラーを再起動しようとするプログラムがあります。最初にプロセスを終了してから、再び開始します。

単純?

そのように見えます-実際に機能しているようです。しかし、何かおかしいことに気付きました:プログラム (たとえば、XP の Power Calculator powertoy) を互換モードで起動しようとすると、動作しなくなりました! 何も起こりません -- プロセスが作成され、すぐに終了します。

タスク マネージャーの [ファイル名を指定して実行] ダイアログからエクスプローラーを実行すると、プログラムは正常に実行されます。

どうしたの?!

#include <windows.h>
int main()
{
    PROCESS_INFORMATION pi;
    STARTUPINFO si = {sizeof(si)};
    TCHAR path[] = TEXT("explorer");
    DWORD f = 0; //I tried a variety of these flags; didn't work
    return CreateProcess(NULL, path, NULL, NULL, FALSE, f, NULL, NULL, &si, &pi);
}

編集1:

  • WOW64 リダイレクトが無効になっている 32 ビットであるという事実は、違いはありませんでした。64ビットにしましたが、問題は同じでした。
  • 試してみShellExecuteましたが、うまくいきませんでした。

編集2:

同じ正確なコードが数回機能し、その後再び機能しなくなりました...え?

4

1 に答える 1

0

これは実際には「理由」に対する答えではありませんが、自分で修正する方法を見つけることができました。

現在のプロセスから環境変数をコピーする代わりに、でコピーするとCreateEnvironmentBlock機能します。

何が原因なのかはまだわかりませんが…

于 2011-06-22T15:38:41.740 に答える