2012-02-19 6 views
2

私は、16ビットプログラムとの互換性の問題を修正するための小さなプログラムを作成しています。この修正プログラムは、エクスプローラがプログラムの一部のパレットをオーバーライドするため、explorer.exeを閉じることです。その後、エクスプローラを再度開きます。タスクバー(explorer.exe)が強制終了された後に再度開きますか?

の.batファイルを使用して、それが動作します:

@ECHO OFF 
taskkill /f /IM explorer.exe 
EmStraditionX.exe 
start /B explorer.exe 

それはダウンロードして余分なファイルを必要とするため、この方法は、理想的ではありません。シンプルさのために、私がC#互換プログラム以上のものを配布することは不可能であると仮定します。

私の最初の考えはちょうどProcess.Start("explorer.exe")でしたが、これはうまくいかず、代わりにエクスプローラウィンドウに「Libraries」フォルダを開いて、タスクバーを再び表示させませんでした。

次に、バッチファイルと同じコマンドを使用しようとしましたが、これは次のようになります。Process.Start("cmd.exe", "/C start /B explorer.exe")、もう一度動作しませんでした。

どのように私はC#からタスクバーを再び開くことができるか知っていますか?

ありがとう、 Ruirize。

+2

を動作させるだろう「エクスプローラを殺します。」互換性シムを調べましたか? (おそらく、アプリケーションの実行中にAero Basicにカラースキームを強制することを余儀なくされたでしょうか?) – josh3736

+0

あなたは、後者の2つのアプローチがうまくいかなかったと言います。何かがまったく立ち上がったのですか?また、Process.Startの他のバリエーション(つまり、より高度なオプションを起動できるようにするもの)を試してみましたか? – reuben

+0

@ josh3736:これは修正です。私たちは、プログラムが割り当てられたパレットを確認していました.Windows 7では16ビットアプリケーションを別の環境(エミュレートすることを想定しています)で実行しているため、タスクバーの最初のものより優先されます。エクスプローラを閉じた瞬間、プログラムは再びパレットを制御しました。 –

答えて

4

用途:

Process.Start(Environment.SystemDirectory + "\\..\\explorer.exe"); 

は完全なパスを置くが、それはあなたの互換性の問題への答えはほぼ確実ではありません

マーティン

+0

ありがとうございました! –

0

互換性オプションで[管理者として実行]機能も使用していますか?

他のセッションからエクスプローラを起動すると、他の(管理者)セッションで実行されているウィンドウが表示されません。

+0

互換プログラムは、バッチファイルと同様に管理者として実行されます。 –

+0

あなたは答えがあります。これがエクスプローラを見ない理由です。ログインしているユーザとして起動する必要があります。 – Kamil

+1

上記を確認すると、explorer.exeへのフルパスを指定することができます。これにより、それを実行するユーザーが変更された場合は、正しいことになります。 –

関連する問題