C# 使用Process.Start()打开文件夹时拒绝访问异常
我有一个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 我假设某个系统变量存储默认文件夹查看器的值,但我不知道在哪里。我会试着去做,稍后再带着答案回来 希望它能有所帮助 编辑:我做了一些快速挖掘,要打开文件夹,以下应该可以做到: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
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);