私は他のトピックを見ました、そして私は別の問題を抱えています。プロセスは開始されていますが(タスクマネージャで表示されます)、画面上でフォルダが開いていません。どうしましたか?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
私は他のトピックを見ました、そして私は別の問題を抱えています。プロセスは開始されていますが(タスクマネージャで表示されます)、画面上でフォルダが開いていません。どうしましたか?
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");
これらのどれも(例外をスローするものを除いて)コンピューターで動作しない場合、問題はコードではなく環境にあるとは思われません。その場合は、次のいずれか(または両方)を試してみます。
Process.Start(path)
ウィンドウをアクティブにします(タスクバーでのみ点滅し、前面に表示されない場合があります)。explorer.exe
+ parameterは新しいウィンドウを常に前面に開きます(ただし、同じウィンドウの複数回)。したがって、どちらにも警告があります。
Process.Start(@"c:\temp")
注意して使用する必要があります。c:\temp.com
存在する場合は、c:\temp.com
代わりに関数呼び出しが開きます。詳細については、forums.iis.net / p / 1239773 / 2144186.aspxを参照してください。
Process.Start(@"c:\temp")
などの別のフォルダを開く可能性があることに注意してください。VS自体がバグのある動作を示すこの問題を参照してください。これを回避するには、バリアントを使用するか、(より良いIMO)常にを追加します。たとえば、。C:\temp.exe
C:\temp.cmd
explorer.exe
Path.DirectorySeparatorChar
Process.Start(@"C:\temp\")
完全を期すために、フォルダを開くだけの場合は、次のようにします。
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
FileName = "C:\\teste\\",
UseShellExecute = true,
Verb = "open"
});
FileNameの末尾がであることを確認Path.DirectorySeparatorChar
して、フォルダーを明確に指すようにします。(@binkiに感謝します。)
このソリューションは、フォルダーを開いて項目を選択する場合は機能しません。動詞がないためです。
C:\teste.exe
またはなどのフォルダーC:\teste.cmd
が存在する場合、エクスプローラーは、意図したフォルダーではなく、他のフォルダーを開きます。これを回避するPath.DirectorySeparatorChar
には、パスにを追加します。VS自体がどのようにして同じ間違いをするかをご覧ください。
Verb = "select"
できません。とにかく、素晴らしい答え!
Verb = "open"
は必要ありませんでした。(Windowsでテスト済み、他のOSは異なる場合があります。)
@記号を使用しているため、バックスラッシュをエスケープする必要がありません。
@を削除するか、\\を\に置き換えます
エスケープされていない文字列を使用する場合、二重のバックスラッシュは必要ありません。
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
System.Diagnostics.Process.Start()
オーバーロードの1つを使用する必要があります。とても簡単です!
実行するプロセスのファイル名を指定しない場合(explorer.exe
)、システムはそれを有効なフォルダーパスとして認識し、すでに実行中のエクスプローラープロセスに添付しようとします。この場合、フォルダがすでに開いていると、エクスプローラは何もしません。
プロセスのファイル名を(そうしたように)配置すると、システムはプロセスの新しいインスタンスを実行しようとし、2番目の文字列をパラメーターとして渡します。文字列が有効なフォルダである場合、新しく作成されたプロセスで開かれます。そうでない場合、新しいプロセスは何もしません。
どのような場合でも、プロセスによって無効なフォルダーパスがどのように処理されるのかわかりません。System.IO.Directory.Exists()
それを確実にするには使用するだけで十分です。
Path.DirectorySeparatorChar
。それ以外の場合、同じ名前.cmd
または.exe
他のサフィックスを持つフォルダが存在する場合、エクスプローラはその別のフォルダを開きます。または、それらが実際に実行可能ファイルまたはスクリプトである場合は、意図したとおりにフォルダを開くのではなく、それらを実行します。
アットマークがそれを行うとき、あなたはバックスラッシュをエスケープしています。
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
このコードはVS2010環境で正常に機能し、ローカルフォルダーを適切に開きますが、IISで同じアプリケーションをホストして開こうとすると、確実に失敗します。
奇妙な。
explorer.exeが見つからない場合は、例外が発生するはずです。フォルダーが見つからない場合でも、いくつかのフォルダー(たとえば、マイドキュメント)を開く必要があります。
Explorerの別のコピーがタスクマネージャーに表示されたが、表示されない。
オフスクリーン(つまり、別のモニター)を開いている可能性はありますか?
それとも、非インタラクティブなサービスでこれを行うのですか?
スタートメニューから「explorer.exe c:\ teste」を実行すると、正しく開きますか?あなたはこれをどのくらいの間やっていますか?マシンに多くのプロセスがあり、新しいプロセスを開いたときにも同様の動作が見られます(セットはIEと表示されます)。タスクマネージャーで起動しますが、フロントエンドには表示されません。再起動を試みましたか?
次のコードは新しいエクスプローラインスタンスを開くはずです
class sample{
static void Main()
{
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
}
}
これを試すときに、たくさんのアプリケーションが実行されていますか?非常に多くのウィンドウを開いていると、システムのGDIハンドルが不足するため、仕事で奇妙な動作が発生することがあります(アプリはたくさん使用します)。
これが発生すると、何かを閉じてGDIハンドルを解放するまで、ウィンドウとコンテキストメニューは表示されなくなります。
XPとVistaのデフォルトの制限は10000です。私のDevStudioが1500のGDIハンドルを持っていることは珍しいことではないため、Dev Studioのコピーをいくつか開いていると、すぐにそれらを使い果たす可能性があります。TaskManagerに列を追加して、各プロセスで使用されているハンドルの数を確認できます。
制限を増やすためにできるレジストリの微調整があります。
詳細については、http://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspxを参照してください