Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Process.Start()打开文件夹时拒绝访问异常_C#_Winforms_Process.start_Win32exception - Fatal编程技术网

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

C# 使用Process.Start()打开文件夹时拒绝访问异常,c#,winforms,process.start,win32exception,C#,Winforms,Process.start,Win32exception,我有一个C语言的winforms应用程序,我必须打开一个特定的文件夹。 我用 这将导致以下异常: System.ComponentModel.Win32异常0x80004005:访问被拒绝 在System.Diagnostics.Process.StartWithShellExecuteExProcessStartInfo startInfo 在System.Diagnostics.Process.Start 位于System.Diagnostics.Process.StartProcess s

我有一个C语言的winforms应用程序,我必须打开一个特定的文件夹。 我用

这将导致以下异常:

System.ComponentModel.Win32异常0x80004005:访问被拒绝

在System.Diagnostics.Process.StartWithShellExecuteExProcessStartInfo startInfo

在System.Diagnostics.Process.Start

位于System.Diagnostics.Process.StartProcess startInfo startInfo

在MyApp.openLogFolderToolStripMenuItem\u中单击对象发送者,事件参数e

我已经检查了以下事项:

文件夹已存在 用户拥有文件夹的权限,可以在资源管理器中打开该文件夹 另一件事是,如果我使用Process.Start打开这个文件夹中的文件,它就会工作

有人能给我一个提示吗?干杯

编辑 我的目标是在资源管理器中打开文件夹。 路径文件夹类似于H:\something\App.Name\Log

根据MSDN,System.Diagnostics.Process.Startstring运行文件或进程,因此不会打开文件夹。对于打开文件夹,建议您可以使用System.Diagnostics.Process.Startstring、string来执行此操作,其中第一个字符串应该是指向资源管理器的方式、Total commander或类似的内容,第二个字符串应该是一个参数,告诉使用过的资源管理器如何打开文件夹pathToFolder

我假设某个系统变量存储默认文件夹查看器的值,但我不知道在哪里。我会试着去做,稍后再带着答案回来

希望它能有所帮助

编辑:我做了一些快速挖掘,要打开文件夹,以下应该可以做到:

System.Diagnostics.Process.Start(Environment.GetEnvironmentVariable("WINDIR") + @"\explorer.exe", pathToFolder);
其中第一个参数是经典windows资源管理器的路径,第二个参数是文件夹本身的实际路径。
widows本身似乎并不拥有指向其他文件夹查看器(如Total Commander等)的路径,因此这种方式可能不适用。

您可以这样设置工作目录,但不能仅运行目录本身的文件或exe

var startInfo=新流程startInfo

startInfo.WorkingDirectory=//工作目录

Process proc=Process.StartstartInfo

试试这个:

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

我通常用它来打开文件/目录:

    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();
        }
    } 


如果这不起作用,那可能毕竟是权限问题。

当打开文件的默认行为与打开文件的相对行为之间存在差异时,实际上会发生此错误。 例如,如果您选择了默认应用程序以Internet Explorer方式打开.pdf文件,并且尝试使用Process.Start方法打开同一文件。您将收到一个异常,因为按照默认操作,它应该在Internet Explorer中打开该文件,而您的应用程序正试图使用Adobe reader打开该文件

若要更正此错误,请将.pdf文件的默认应用程序设置为Adobe Reader,您将不再收到此错误。
您可以通过右键单击文件,然后选择“默认程序”或“应用程序”来完成此操作。此外,从可用程序列表中选择默认程序或应用程序,然后选择“始终使用所选程序/应用程序打开此类型的文件”

如果它是ASP.NET的超链接,您可以使用

Response.Redirect(url);

路径不是可以使用process.start…打开/启动的可执行文件,您正在尝试使用特定路径打开explorer.exe吗?打开visual studio以管理员身份运行clicking@Thorarins这是对的。为什么不告诉我们你到底想归档什么?不确定大多数评论和回答的人在重复这个过程时都在谈论什么。Start不会打开文件夹路径。是的。我在一个使用此功能多年的.NET Framework应用程序上工作。我之所以来到这里,是因为我刚刚将应用程序迁移到.NET Core,现在我得到了“访问被拒绝”错误。只需调用Process.Startexplorer.exe,pathToFolder;而不是Process.StartpathToFolder;那不是真的。没有任何东西可以阻止您使用与Windows下默认程序不同的程序打开文件。想象一下如果你的电脑上有一个.TXT文件垄断会发生什么!这会将浏览器重定向到其他URL。这与在本地计算机上启动进程无关。这是最好的方法!其中一个原因是,如果您多次调用它,它将不会多次重新打开文件夹,并将重用原始窗口
Process.Start("explorer.exe",path);
Response.Redirect(url);