我在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
答案 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';
});
}