23

問題

バッチ ファイルの一部 (追加情報を参照) では、エクスプローラーを再起動する必要があるため、試行錯誤された方法を使用します。

taskkill /f /im explorer.exe >nul
explorer.exe

するとこうなる

  1. explorer.exe正常に終了しました
  2. explorer.exeは開始されますが (画像 2 を参照)、エクスプローラー ウィンドウしか開きません。

Win + Rその後、エクスプローラーの一部であると想定しているため、タスクマネージャーから新しいタスクを開始することによってのみ、エクスプローラーを適切に再起動できます。

追加情報

ここで、WinRAR で作成された自己実行型 SFX アーカイブからバッチ ファイルを実行しているので、「ちょっと」と言います。したがって、実行すると、アーカイブの内容が抽出され%temp%、抽出が成功すると、ユーザー定義ファイル (通常はブートストラップ、この場合はバッチ ファイル) が実行されます。

これまでのところ、私は推測しました

  1. explorer.exe間違いなく完全に殺されています。
  2. バッチ ファイルは間違いなく正しく呼び出され、正しく実行されます。開始する行を除いて、スクリプト内の他のすべてが設計どおりに動作します。explorer.exe
  3. エクスプローラーを再起動するコマンドは、遅延を試みたので、「タイミングが悪い」などではありません。
  4. バッチ ファイルは、アーカイブから手動で抽出すると完全に機能するため、圧縮または抽出プロセスの問題ではありません。
  5. Explorerなどのコマンドでもstart explorer.exe | cmd.exe正常に再起動しないため、.batファイルの問題ではありません。

Windows XP と Windows 7 x86 では動作することを確認できますが、Windows 7 x64 (私のシステム) では動作しません。

状態

現時点では、コード自体が機能することが証明されているため、WinRAR には懐疑的です。そのため、さまざまなバージョンの WinRAR を使用して自己実行 SFX を作成しています。これまでのところ、私はバージョンを試しました:

  • 4.11 x86
  • 4.11×64
  • 4.20b3 x86
  • 4.20b3 x64

毎回同じ結果でした。

昨日dev@rarlab.comにバグレポートを提出し、今朝Eugene Roshal自身から返信を受け取りました

こんにちは、SFX モジュールは ShellExecuteEx を使用してセットアップ アプリケーションを起動します。通常はうまく機能します。Explorer がウィンドウ モードに切り替える理由がわかりません。今、私は小さなスタンドアロンプ​​ログラムを構築しました

#include <windows.h>    
void main()
{
  SHELLEXECUTEINFO si;
  memset(&si,0,sizeof(si));
  si.cbSize=sizeof(si);
  si.lpFile="test.bat";
  si.nShow=SW_SHOWNORMAL;
  ShellExecuteEx(&si);
}

サンプルのような内容で test.bat を実行します。このプログラムは、WinRAR SFX とまったく同じ動作を示すため、エクスプローラーをウィンドウで起動します。

そして今朝二通目のメール

申し訳ありませんが、今はアドバイスではありません。ShellExecuteEx を CreateProcess に置き換えました

#include <windows.h>
void main()
{
  STARTUPINFO si;
  PROCESS_INFORMATION pi;
  memset(&si,0,sizeof(si));
  si.cb=sizeof(si);
  CreateProcess(NULL,"test.bat",NULL,NULL,TRUE,0,NULL,NULL,&si,&pi);
}

しかし、結果は同じです。SW_SHOWDEFAULT や SW_RESTORE などの他の SW_ フラグを ShellExecuteEx と共に "open" および "explore" lpVerb として使用しようとしましたが、役に立ちません。今のところ、このウィンドウ モードとデスクトップ モードの背後にあるロジックがわかりません。

見通しが厳しいことは承知していますが、それが誰かの助けになることを願っています..

証明/証拠

これを示す SFX アーカイブへのリンク (必要な場合): https://dl.dropbox.com/u/27573003/Social%20Distribution/restart-explorer.exe

画像1

画像2

ここで、VM 内でコマンドを実行していることに気付くかもしれませんが ( で示されています VMwareTray.exe)、これは VM が原因の競合ではありません。自分のホスト システム (同じ OS) でまったく同じファイルをテストしたところ、同じ結果が得られました。

アップデート

REG ADDまったく別のプロジェクトで使用すると、同様の「SFX アーカイブの外にあるが、1 つのアーカイブからではない作品」の問題が発生します。SFX アーカイブがバッチ ファイルでうまく機能するとは思えません。

4

15 に答える 15

9

私はこれと同じ問題を抱えていましたが、ここにあるすべてのソリューションがまだバッチ スクリプトからは機能しないことがわかりました。

これらのどれも完全に機能しませんでした:

start explorer.exe
start explorer
explorer.exe
explorer

全員がウィンドウを開いた (タスクバーが再び表示されなかった) か、その後バッチ スクリプトがハングし、それ以上コマンドを実行できなくなったためです。

バッチファイルの次の行が機能することがわかりました(explorer.exeを強制終了した後):

start "" "%windir%\explorer.exe"

また、スクリプト内でその後に他のコマンドを実行することもできました

于 2014-05-27T12:27:14.830 に答える
6

これは Windows 7 で機能します。

taskkill /f /IM explorer.exe
start explorer.exe
exit
于 2012-06-09T14:33:32.053 に答える
1

試す

%windir%\explorer.exe
start %windir%\explorer.exe
start /d%windir% explorer.exe
于 2012-06-08T19:17:35.947 に答える
1

64 ビット Windows で 32 ビット アプリケーションから explorer.exe を実行すると、パスは 32 ビットの explorer.exe を含む SysWOW64 ディレクトリにリダイレクトされます。

XP64 では、それほど大したことではありませんでした。タスク マネージャーで、32 ビットの explorer.exe が実行されているのを確認できますが、シェルとして起動しました。Windows 10 では (この問題は Windows 7 で導入されたようです)、32 ビットの explorer.exe は 64 ビットの explorer.exe の新しいインスタンスを作成するスタブです。おそらくここでコマンドラインにパスが渡されるため、64 ビットの explorer.exe はシェルを開始する代わりにウィンドウを開きます。

そのため、コマンドライン パラメータとしてパスを指定して、または指定せずに explorer.exe を開始することで、ウィンドウまたはシェルを開始するかどうかを制御できることは以前と同様です。

代わりに、32 ビット アプリケーションから 64 ビットの explorer.exe を強制的に起動する必要があります。これを行うための 1 つの方法は、前述のように sysnative ディレクトリを使用することです。ただし、Wow64DisableWow64FsRedirection/Wow64RevertWow64FsRedirection を使用する方法もあります。

私は後者を実行しましたが、うまく動作することを確認できました。CreateProcess と ShellExecuteEx API の両方。

于 2018-08-18T01:08:32.720 に答える
0

C#でこれを行う前に、同様の問題を見てきました。このプロセスは、エクスプローラー ウィンドウではなくエクスプローラー シェルを呼び出して呼び出す必要がありましたが、バッチ処理で問題は発生していません。

これを使用してみてください:

taskkill /im explorer.exe /f
explorer

他の回答との違いは、以前に問題を引き起こしたものではありませんexplorerexplorer.exe

これは私の Win7 x64 PC で動作します。

お役に立てれば!

于 2012-06-11T09:29:43.933 に答える
0

Visual Studio にも同じ問題があります。

私にとって何がうまくいくか(Win 7 Pro 64bit):

プロジェクト名のPPMは「プロパティ」を選択します

構成プロパティ > ビルド イベント > ビルド前イベント

taskkill /im explorer.exe /f

構成プロパティ > ビルド イベント > ビルド後イベント

start "" "C:\Windows\explorer.exe"

しかし、これにより別の問題が発生し (エクスプローラーの実行後に IDE がフリーズします)、IDE を再起動してビルド コマンドを再度実行することしかできなくなりました...

于 2015-07-02T12:09:14.130 に答える
0

x64 または x86 でこれ (管理者権限を持つ .bat) を使用します。

tasklist /fi "imagename eq explorer*" | find /i "explorer*"
if not errorlevel 1 (taskkill /f /im "explorer*") else (
start %windir%\explorer.exe
于 2016-07-25T17:34:37.130 に答える
0

Windows 7 64ビットで私にとってうまくいったのは、「C:\ Windows\expstart.exe」または単にexpstart.exeでした

于 2016-11-22T17:44:36.860 に答える
0

先日、WinRAR のより高度なオプションを調べていたところ、次のタブに出会いました。

ここに画像の説明を入力

この問題は Windows 7 x64 でのみ発生するため、問題と解決策の一部であると思われることを確認するとすぐに.

疑わしいDefault64.SFXように、デフォルトのモジュールの代わりにモジュールを使用するとDefault.SFX、問題が完全に修正されました。ついに。

于 2013-02-25T22:27:07.893 に答える