使用Process.Start()打开文件夹

时间:2016-01-27 08:10:14

标签: c# winforms process.start win32exception

我在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)

     

at MyApp.openLogFolderToolStripMenuItem_Click(Object sender,EventArgs e)

我已经检查了以下内容:

  • 文件夹存在
  • 用户拥有该文件夹的权限(可以在资源管理器中打开)

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

任何人都可以给我一个提示吗?是干杯

修改 我的目标是在资源管理器中打开该文件夹。 pathToFolder类似于H:\Something\App.Name\Log

6 个答案:

答案 0 :(得分:3)

根据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)执行此操作,其中第一个应该是探测器,Total指挥官或类似的东西,第二个应该是一个参数告诉使用过的资源管理器该怎么做do(打开文件夹pathToFolder)。

我认为某些系统变量存储"默认文件夹查看器"但我不知道在哪里。我会试着去找它并稍后回答。

希望它有所帮助。

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

System.Diagnostics.Process.Start(Environment.GetEnvironmentVariable("WINDIR") + @"\explorer.exe", pathToFolder);

第一个参数是传统Windows资源管理器的路径,第二个参数是文件夹本身的实际路径。 似乎寡妇本身并没有通往其他"文件夹查看器" (比如Total Commander等),所以这种方式可能不在桌面上。

答案 1 :(得分:0)

您可以像这样设置工作目录,但是您无法仅运行目录文件或exe

var startInfo = new ProcessStartInfo();

startInfo.WorkingDirectory = //工作目录

进程proc = Process.Start(startInfo);

答案 2 :(得分:0)

试试这个:

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

答案 3 :(得分:0)

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

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

如果这不起作用,它可能是一个许可问题。

答案 4 :(得分:-1)

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

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

答案 5 :(得分:-1)

如果它是ASP.NET的超链接,则可以使用替代方法

// returns a promise that resolves to true  if the browser automatically
// rotates images based on exif data and false otherwise
function browserAutoRotates () {
    return new Promise((resolve, reject) => {
        // load an image with exif rotation and see if the browser rotates it
        const image = new Image();
        image.onload = () => {
            resolve(image.naturalWidth === 1);
        };
        image.onerror = reject;
        // this jpeg is 2x1 with orientation=6 so it should rotate to 1x2
        image.src = 'data:image/jpeg;base64,/9j/4QBiRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAYAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAAITAAMAAAABAAEAAAAAAAAAAABIAAAAAQAAAEgAAAAB/9sAQwAEAwMEAwMEBAMEBQQEBQYKBwYGBgYNCQoICg8NEBAPDQ8OERMYFBESFxIODxUcFRcZGRsbGxAUHR8dGh8YGhsa/9sAQwEEBQUGBQYMBwcMGhEPERoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoa/8IAEQgAAQACAwERAAIRAQMRAf/EABQAAQAAAAAAAAAAAAAAAAAAAAf/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAF/P//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAQUCf//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQMBAT8Bf//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQIBAT8Bf//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEABj8Cf//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAT8hf//aAAwDAQACAAMAAAAQH//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQMBAT8Qf//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQIBAT8Qf//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAT8Qf//Z';
    });
}