c# - .net framework filestream - 実行可能ファイルがWindowsのパスに存在するかどうかを確認する



2 Answers

これは危険で、PATHのディレクトリを検索するだけではありません。 これを試して:

 Process.Start("wordpad.exe");

実行ファイルは、マシン上のc:¥Program Files¥Windows NT¥Accessoriesに保存されています。そのディレクトリはパス上にありません

HKCR \ ApplicationsとHKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Pathsキーは、実行可能ファイルの検索にも役立ちます。 私はこのような追加の地雷があると確信していますが、64ビットバージョンのWindowsでのディレクトリ仮想化は、たとえばあなたを上手くいくことができます。

これをより信頼できるものにするために、AssocQueryString()をピンボケする必要があると思います。 わかりません、決して必要はありませんでした。 より良いアプローチは確かに質問をする必要はありません。

c# .net file

ShellExecute (またはSystem.Diagnostics.Process.Start()で.net)でプロセスを実行すると、開始するファイル名プロセスがフルパスである必要はありません。

メモ帳を開始したい場合は、

Process.Start("notepad.exe");

の代わりに

Process.Start(@"c:\windows\system32\notepad.exe");

direcotry c:\windows\system32はPATH環境変数の一部であるためです。

プロセスを実行せずに、PATH変数を解析せずにファイルがPATH上に存在するかどうかを確認する方法はありますか?

System.IO.File.Exists("notepad.exe"); // returns false
(new System.IO.FileInfo("notepad.exe")).Exists; // returns false

私はこのようなものが必要です:

System.IO.File.ExistsOnPath("notepad.exe"); // should return true

そして

System.IO.File.GetFullPath("notepad.exe"); // (like unix which cmd) should return
                                           // c:\windows\system32\notepad.exe

BCLでこのタスクを実行するための定義済みクラスはありますか?




私は同じことをしています。私は現在、最良の選択肢はCreateProcessへのネイティブコールを使用してプロセスを中断し、成功を監視することだと思います。 その後すぐに処理を終了する。 中断されたプロセスを終了しても、リソースの出血は起こらないはずです。[要出典:]

私は実際に使用されたパスを把握することができないかもしれませんが、ExistsOnPath()のような簡単な要件のために、より良い解決策が得られるまで、これを行う必要があります。




Related


Tags

c#   .net   file