web-dev-qa-db-ja.com

Process.Startを使用してフォルダーを開く

他のトピック を見ましたが、別の問題が発生しています。プロセスは開始しています(タスクマネージャーで見た)が、フォルダーが画面で開かない。どうしましたか?

System.Diagnostics.Process.Start("Explorer.exe", @"c:\teste");
135
Daniel

フォルダ「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");

これらのどれも(まあ、例外をスローするものを除く)がコンピューターで動作しない場合、問題はコードにあるのではなく、環境にあると思います。その場合は、次のいずれか(または両方)を試します。

  • [ファイル名を指定して実行]ダイアログを開き、「Explorer.exe」と入力してEnterキーを押します
  • コマンドプロンプトを開き、「Explorer.exe」と入力してEnterキーを押します
234
Fredrik Mörk

完全を期すために、フォルダを開くだけでよい場合は、これを使用します。

System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
    FileName = "C:\\teste\\",
    UseShellExecute = true,
    Verb = "open"
});

FileNameがPath.DirectorySeparatorCharで終わっていることを確認して、明確にフォルダーを指すようにします。 (@binkiに感謝します。)

このソリューションは、動詞がないように見えるため、フォルダを開いてアイテムを選択する場合には機能しません。

40
OregonGhost

ファイルまたはフォルダーを選択する場合は、次を使用できます。

Process.Start("Explorer.exe", "/select, c:\\teste");
15
Scyssion

@記号を使用しているため、バックスラッシュをエスケープする必要がありません。

@を削除するか、\\を\に置き換えます

5
Kevin Laity

エスケープされていない文字列を使用する場合、二重のバックスラッシュは必要ありません。

System.Diagnostics.Process.Start("Explorer.exe",@"c:\teste");
4
Joel Coehoorn

System.Diagnostics.Process.Start()オーバーロードのいずれかを使用する必要があります。とても簡単です!

実行するプロセスのファイル名(Explorer.exe)を配置しない場合、システムはそれを有効なフォルダーパスとして認識し、既に実行中のエクスプローラープロセスにアタッチしようとします。この場合、フォルダーが既に開いていると、エクスプローラーは何もしません。

プロセスのファイル名を(指定どおりに)配置すると、システムはプロセスの新しいインスタンスを実行しようとし、2番目の文字列をパラメーターとして渡します。文字列が有効なフォルダである場合、新しく作成されたプロセスで開かれます。そうでない場合、新しいプロセスは何もしません。

どのような場合でも、プロセスによって無効なフォルダーパスがどのように扱われるかはわかりません。 System.IO.Directory.Exists()を使用するだけで十分です。

3
Leonardo Maxson
System.Diagnostics.Process.Start("Explorer.exe",@"c:\teste"); 

このコードはVS2010環境では正常に機能し、ローカルフォルダーを適切に開きますが、IISで同じアプリケーションをホストし、開こうとすると、確実に失敗します。

1
user3815534

ProcessStartInfoインスタンスを取得するメソッドのオーバーロードバージョンを使用し、ProcessWindowStyleプロパティを適切な値に設定します。

1
Jeremy Cron

この問題が発生したばかりで、その理由がわかりました。私の理由はここにリストされていないので、この問題を受け取った人は誰も修正しません。

別のユーザーとしてVisual Studioを実行し、Process.Startを使用しようとすると、そのユーザーコンテキストで実行され、画面に表示されません。

1
New Bee

スタートメニューから「Explorer.exe c:\ teste」を実行すると、正しく開きますか?どれくらいこれを試していますか?マシンに多くのプロセスがあり、新しいプロセス(IEと言うセット)を開くと、同様の動作が見られます。タスクマネージャーで起動しますが、フロントエンドには表示されません。再起動を試みましたか?

次のコードは、新しいExplorerインスタンスを開く必要があります

class sample{

static void Main()
{
  System.Diagnostics.Process.Start("Explorer.exe",@"c:\teste");
}
}
0
schar

これを試しているときに、多くのアプリケーションを実行していますか?私は非常に多くのウィンドウを開いているため、システムでGDIハンドルが不足するため、職場で奇妙な動作に遭遇することがあります(アプリはalotを使用します)。

これが発生すると、いくつかのGDIハンドルを解放するために何かを閉じるまで、ウィンドウとコンテキストメニューは表示されなくなります。

XPおよびVistaのデフォルトの制限は10000です。私のDevStudioが1500 GDIハンドルを持つことは珍しいことではありません。すぐに食べてください。 TaskManagerに列を追加して、各プロセスで使用されているハンドルの数を確認できます。

制限を増やすためにできるレジストリの調整があります。

詳細については、 http://msdn.Microsoft.com/en-us/library/ms724291(VS.85).aspx を参照してください

0
Curtis

アットマークがあなたのためにそれをするとき、あなたはバックスラッシュをエスケープしています。

System.Diagnostics.Process.Start("Explorer.exe",@"c:\teste");
0
Austin Salonen

System.Diagnostics.Process.Start("Explorer.exe",@"c:\teste");

パスを変更するか、stringで宣言するだけです

0
Gaurav Bari

奇妙な。

Explorer.exeが見つからない場合は、例外が発生します。フォルダーが見つからない場合でも、いくつかのフォルダー(マイドキュメントなど)を開く必要があります。

Explorerの別のコピーがタスクマネージャーに表示されますが、表示できません。

オフスクリーン(つまり、別のモニター)を開いている可能性はありますか?

または、非対話型サービスでこれを行う可能性はありますか?

0
sgmoore