使用 Process.Start() 打开文件夹时访问被拒绝异常

IRA*_*eas 14 c# win32exception process.start winforms

我在 C# 中有一个 winforms 应用程序,我必须在其中打开某个文件夹。我用

System.Diagnostics.Process.Start(pathToFolder);
Run Code Online (Sandbox Code Playgroud)

这导致以下异常:

System.ComponentModel.Win32Exception (0x80004005): 访问被拒绝

在 System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)

在 System.Diagnostics.Process.Start()

在 System.Diagnostics.Process.Start(ProcessStartInfo startInfo)

在 MyApp.openLogFolderToolStripMenuItem_Click(Object sender, EventArgs e)

我已经检查了以下事项:

  • 文件夹存在
  • 用户有权访问该文件夹(可以在资源管理器中打开它)

另一件事是,如果我使用Process.Start()打开此文件夹中的文件,它会起作用。

谁能给我一个提示?
干杯

编辑 我的目标是在资源管理器中打开文件夹。的pathToFolder是一样的东西H:\Something\App.Name\Log

Rao*_*Rao 13

根据 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)首先应该是浏览器的方式来执行此操作,总指挥官或类似的东西,第二个应该是一个参数,告诉使用的资源管理器做什么(打开文件夹pathToFolder)。

我想某些系统变量存储了“默认文件夹查看器”的值,但我不知道在哪里。我会努力去做,然后带着答案回来。

希望它有帮助。


编辑:我做了一些快速挖掘并打开文件夹,以下应该可以解决问题:

System.Diagnostics.Process.Start(Environment.GetEnvironmentVariable("WINDIR") + @"\explorer.exe", pathToFolder);
Run Code Online (Sandbox Code Playgroud)

其中第一个参数是经典 Windows 资源管理器的路径,第二个参数是文件夹本身的实际路径。似乎寡妇本身并不拥有通往其他“文件夹查看器”(例如 Total Commander 等)的路径,因此这种方式可能不适用。

  • 可以通过简单地调用 `Process.Start("explorer.exe", pathToFolder);` 而不是 `Process.Start(pathToFolder);` 来解决问题 (4认同)

ark*_*nia 9

尝试这个:

var psi = new System.Diagnostics.ProcessStartInfo() { FileName = pathToFolder, UseShellExecute = true };
System.Diagnostics.Process.Start(psi);
Run Code Online (Sandbox Code Playgroud)