特定のフォルダーを開かなければならないC#のwinformsアプリケーションがあります。私が使う
_System.Diagnostics.Process.Start(pathToFolder);
_
これにより、次の例外が発生します。
System.ComponentModel.Win32Exception(0x80004005):アクセスが拒否されました
system.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)で
system.Diagnostics.Process.Start()で
system.Diagnostics.Process.Start(ProcessStartInfo startInfo)で
myApp.openLogFolderToolStripMenuItem_Click(オブジェクト送信者、EventArgs e)で
私はすでに次のことを確認しました:
もう1つは、Process.Start()
を使用してこのフォルダー内のファイルを開くと、機能することです。
誰かが私にヒントを与えることができますか?
乾杯
編集私の目標はエクスプローラーでフォルダーを開くことです。 pathToFolder
は_H:\Something\App.Name\Log
_のようなものです
MSDNによると( https://msdn.Microsoft.com/en-us/library/53ezey2s(v = vs.110).aspx )System.Diagnostics.Process.Start(string)
はファイルを実行するか、プロセス(したがって、フォルダを開きません)。フォルダを開く場合、 https://msdn.Microsoft.com/en-us/library/h6ak8zt5(v = vs.110).aspx は、System.Diagnostics.Process.Start(string, string)
ここで、最初はExplorer、Total commanderなどへの道であり、2番目は使用するExplorerに何をすべきかを指示する引数である必要があります(フォルダーpathToFolder
を開きます)。
一部のシステム変数には「デフォルトのフォルダビューア」の値が格納されていると思いますが、どこにあるのかわかりません。私はそれのために行き、後で答えを持って戻るようにします。
それがお役に立てば幸いです。
EDIT:ちょっと掘り下げてフォルダを開くと、次のようになります。
System.Diagnostics.Process.Start(Environment.GetEnvironmentVariable("WINDIR") + @"\Explorer.exe", pathToFolder);
ここで、最初の引数は従来のWindowsエクスプローラーへのパスであり、2番目の引数はフォルダー自体への実際のパスです。未亡人はそれ自体では他の「フォルダビューア」(Total Commanderなど)へのパスを保持していないようです。したがって、この方法はおそらくテーブルから外れています。
私は通常これを使用してファイル/ディレクトリを開きます:
public static void OpenFile(string path, bool isDirectory = false)
{
if (string.IsNullOrEmpty(path)) return;
if ((isDirectory && Directory.Exists(path)) || (!isDirectory && File.Exists(path)))
{
ProcessStartInfo pi = new ProcessStartInfo(path);
pi.Arguments = Path.GetFileName(path);
pi.UseShellExecute = true;
pi.WindowStyle = ProcessWindowStyle.Normal;
pi.Verb = "OPEN";
Process proc = new Process();
proc.StartInfo = pi;
proc.Start();
}
}
または
Process.Start("Explorer.exe",path);
これが機能しない場合は、結局のところ許可の問題である可能性があります。
このように作業ディレクトリを設定することはできますが、ディレクトリ自体を実行することはできません。ファイルまたはexeのみです。
var startInfo = new ProcessStartInfo();
startInfo.WorkingDirectory = //作業ディレクトリ
プロセスproc = Process.Start(startInfo);
これを試して:
var psi = new System.Diagnostics.ProcessStartInfo() { FileName = pathToFolder, UseShellExecute = true };
System.Diagnostics.Process.Start(psi);