他のトピック を見ましたが、別の問題が発生しています。プロセスは開始しています(タスクマネージャーで見た)が、フォルダーが画面で開かない。どうしましたか?
System.Diagnostics.Process.Start("Explorer.exe", @"c:\teste");
フォルダ「c:\teste
」が存在することを確認しましたか?そうでない場合、エクスプローラーが開き、デフォルトのフォルダー(私の場合は「C:\Users\[user name]\Documents
」)が表示されます。
更新
次のバリエーションを試しました。
// opens the folder in Explorer
Process.Start(@"c:\temp");
// opens the folder in Explorer
Process.Start("Explorer.exe", @"c:\temp");
// throws exception
Process.Start(@"c:\does_not_exist");
// opens Explorer, showing some other folder)
Process.Start("Explorer.exe", @"c:\does_not_exist");
これらのどれも(まあ、例外をスローするものを除く)がコンピューターで動作しない場合、問題はコードにあるのではなく、環境にあると思います。その場合は、次のいずれか(または両方)を試します。
完全を期すために、フォルダを開くだけでよい場合は、これを使用します。
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
FileName = "C:\\teste\\",
UseShellExecute = true,
Verb = "open"
});
FileNameがPath.DirectorySeparatorChar
で終わっていることを確認して、明確にフォルダーを指すようにします。 (@binkiに感謝します。)
このソリューションは、動詞がないように見えるため、フォルダを開いてアイテムを選択する場合には機能しません。
ファイルまたはフォルダーを選択する場合は、次を使用できます。
Process.Start("Explorer.exe", "/select, c:\\teste");
@記号を使用しているため、バックスラッシュをエスケープする必要がありません。
@を削除するか、\\を\に置き換えます
エスケープされていない文字列を使用する場合、二重のバックスラッシュは必要ありません。
System.Diagnostics.Process.Start("Explorer.exe",@"c:\teste");
System.Diagnostics.Process.Start()
オーバーロードのいずれかを使用する必要があります。とても簡単です!
実行するプロセスのファイル名(Explorer.exe
)を配置しない場合、システムはそれを有効なフォルダーパスとして認識し、既に実行中のエクスプローラープロセスにアタッチしようとします。この場合、フォルダーが既に開いていると、エクスプローラーは何もしません。
プロセスのファイル名を(指定どおりに)配置すると、システムはプロセスの新しいインスタンスを実行しようとし、2番目の文字列をパラメーターとして渡します。文字列が有効なフォルダである場合、新しく作成されたプロセスで開かれます。そうでない場合、新しいプロセスは何もしません。
どのような場合でも、プロセスによって無効なフォルダーパスがどのように扱われるかはわかりません。 System.IO.Directory.Exists()
を使用するだけで十分です。
System.Diagnostics.Process.Start("Explorer.exe",@"c:\teste");
このコードはVS2010環境では正常に機能し、ローカルフォルダーを適切に開きますが、IISで同じアプリケーションをホストし、開こうとすると、確実に失敗します。
ProcessStartInfoインスタンスを取得するメソッドのオーバーロードバージョンを使用し、ProcessWindowStyleプロパティを適切な値に設定します。
この問題が発生したばかりで、その理由がわかりました。私の理由はここにリストされていないので、この問題を受け取った人は誰も修正しません。
別のユーザーとしてVisual Studioを実行し、Process.Startを使用しようとすると、そのユーザーコンテキストで実行され、画面に表示されません。
スタートメニューから「Explorer.exe c:\ teste」を実行すると、正しく開きますか?どれくらいこれを試していますか?マシンに多くのプロセスがあり、新しいプロセス(IEと言うセット)を開くと、同様の動作が見られます。タスクマネージャーで起動しますが、フロントエンドには表示されません。再起動を試みましたか?
次のコードは、新しいExplorerインスタンスを開く必要があります
class sample{
static void Main()
{
System.Diagnostics.Process.Start("Explorer.exe",@"c:\teste");
}
}
これを試しているときに、多くのアプリケーションを実行していますか?私は非常に多くのウィンドウを開いているため、システムでGDIハンドルが不足するため、職場で奇妙な動作に遭遇することがあります(アプリはalotを使用します)。
これが発生すると、いくつかのGDIハンドルを解放するために何かを閉じるまで、ウィンドウとコンテキストメニューは表示されなくなります。
XPおよびVistaのデフォルトの制限は10000です。私のDevStudioが1500 GDIハンドルを持つことは珍しいことではありません。すぐに食べてください。 TaskManagerに列を追加して、各プロセスで使用されているハンドルの数を確認できます。
制限を増やすためにできるレジストリの調整があります。
詳細については、 http://msdn.Microsoft.com/en-us/library/ms724291(VS.85).aspx を参照してください
アットマークがあなたのためにそれをするとき、あなたはバックスラッシュをエスケープしています。
System.Diagnostics.Process.Start("Explorer.exe",@"c:\teste");
System.Diagnostics.Process.Start("Explorer.exe",@"c:\teste");
パスを変更するか、string
で宣言するだけです
奇妙な。
Explorer.exeが見つからない場合は、例外が発生します。フォルダーが見つからない場合でも、いくつかのフォルダー(マイドキュメントなど)を開く必要があります。
Explorerの別のコピーがタスクマネージャーに表示されますが、表示できません。
オフスクリーン(つまり、別のモニター)を開いている可能性はありますか?
または、非対話型サービスでこれを行う可能性はありますか?