2009-07-15 4 views
108

私はother topicを見ましたが、別の問題があります。プロセスが開始されています(タスクマネージャーに見えてください)が、フォルダが画面上で開いていません。どうしましたか?Process.Startを使用してフォルダを開きます

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

あなたのパスは正しいですか? –

+1

Explorerを手動で呼び出したいのはなぜですか? UseShellExecuteをtrueに設定し、Verbを「open」に設定して、ProcessStartInfoを使用してProcess.Startを呼び出すだけで、フォルダを開くのはなぜですか? – OregonGhost

+1

はい、私はパスを使わずに 'explorer.exe'を開こうとしましたが、どちらも動作しませんでした。 – Daniel

答えて

189

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

これらのどれもが(まあ、例外をスロー1を除く)お使いのコンピュータ上で動作していない場合は、私は考えていません問題はコードにあるが、環境にあること。その場合は、私は、次のいずれか(または両方)をしようとするだろう:

  • オープンファイル名を指定して実行]ダイアログボックスには、「explorer.exeの」と入力し、
  • コマンドプロンプトを開き、タイプ「エクスプローラを入力してヒット。 exe "を入力してヒットします。
+0

それは存在しなかったと思いますが、同じ方法でフォルダを開くのでしょうか? – Daniel

+0

環境に問題がある可能性があります。cmdを使用してexplorer.exeを開き、標準を開きました。Process.Startのどれも 'Process.Start(@ "c:\ does_not_exist"); – Daniel

+1

エクスプローラウィンドウが既に開いている場合、小さな違いがあります: 'Process.Start(path)'はウィンドウをアクティブにします(タスクバーで点滅するだけで、前面に移動することはできません)。 'explorer.exe' +パラメータは常に新しいウィンドウを前面に開きます(ただし、同じウィンドウを何度も繰り返します)。両方とも注意点がある。 – KekuSemau

4

あなたのバックスラッシュをエスケープする必要がなくなり、@記号を、使用しています。アットマークのためのことをしたときにあなたは、バックスラッシュをエスケープしている

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

まだフォルダが開かれていません。プロセス@タスクマネージャーを起動するだけです – Daniel

+0

私はそれ以上の提案はありません。テストしてVisual C#express 2008で動作させることができました –

+0

私は...シマウマあなたのエクスプローラに何か問題があります。おそらくviriiかsometing ... –

3

で\\置き換えます君は。

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

:エスケープされていない文字列を使用するときは、二重のバックスラッシュを必要としない

@を削除するか、\

1

ProcessStartInfoインスタンスを取り、あなたのために働く値にProcessWindowStyleプロパティを設定するメソッドのオーバーロードされたバージョンを使用してください。

0

Strange

explorer.exeが見つからない場合は例外が発生します。フォルダが見つからない場合は、まだフォルダ(たとえば、マイドキュメント)が開いているはずです

あなたはタスクマネージャに別のエクスプローラが表示されていますが、表示されません。

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

または、非インタラクティブサービスでこれを行う可能性はありますか?あなたがしたいすべてのフォルダを開くことであれば

+0

私はモニタが1台しかありません。「あなたは、タスクマネージャに別のエクスプローラのコピーが表示されていますが、見ることはできません。これは正しいです...あなたが何を意味するのか分かりません。あるいは、非インタラクティブなサービスでこれをやっているのですか? – Daniel

+0

私は、あなたが書いているプログラムが通常のwinformsプログラムではなく、サービス(デフォルトでは完全にバックグラウンドで実行される)であることを意味します。 (サービスが何であるかわからない場合は、サービスを作成している可能性は低いです)。 taskmanagerに戻って、この「隠しエクスプローラ」ウィンドウで「切り替える」、「前面に移動する」、または「最大化」のいずれかを選択すると、表示されますか? – sgmoore

25

ただ、完全を期すため、これを使用します。

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

ありませんので、このソリューションは、フォルダを開いて項目を選択するために動作しません。それは動詞に見えます。

+0

これはWindowsとMonoを使用しているLinuxの両方で動作します。 –

0

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

次のコードは、あなたがこれをしようとしているとき、実行中のアプリケーションの多くを持っていますか新しいExplorerインスタンス

class sample{ 

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

を開く必要がありますか? 非常に多くのウィンドウが開いている(私たちのアプリケーションはたくさん使用しています)ので、私のシステムにはGDIハンドルがなくなっているので、仕事で奇妙な動作が発生することがあります。

これが起こると、何かを閉じてGDIハンドルを解放するまで、ウィンドウとコンテキストメニューが表示されなくなります。

デフォルトの制限は10000です。 DevStudioには1500個のGDIハンドルがあることは珍しいことではないので、Devスタジオを開いていればかなり早くそれらを食べることができます。 TaskManagerに列を追加して、各プロセスで使用されているハンドルの数を確認することができます。

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

詳細についてはあなたがSystem.Diagnostics.Process.Start()オーバーロードのいずれかを使用する必要がありhttp://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx

3

を参照してください。それは非常に簡単です!

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

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

どのような場合でも、プロセスによって無効なフォルダパスがどのように処理されるかわかりません。 System.IO.Directory.Exists()を使用すると、そのことを確認するのに十分なはずです。

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

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

0

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

だけでパスを変更したり、ファイルを選択するかは、以下を使用することができますフォルダにしたい場合はstring

9

でそれを宣言する:

Process.Start("explorer.exe", "/select, c:\\teste"); 
0

アイブ氏は、ちょうどこの問題を持っていました、そしてなぜ私はそれを知った。私の理由はここには記載されていないので、誰もがこの問題を抱えていて、これを修正するものはありません。

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

関連する問題