C# 没有应用程序与指定的文件异常关联

C# 没有应用程序与指定的文件异常关联,c#,exception-handling,notepad,process.start,win32exception,C#,Exception Handling,Notepad,Process.start,Win32exception,大家好, 在尝试使用Process时,我在测试的一台计算机上遇到以下异常。请开始打开一个.csv文件。我认为这是因为没有为该框上的.csv文件设置文件关联 那么你如何避免这种情况呢 强制进程。是否开始在记事本中打开?-理想情况下,它应该在excel中打开,但如果excel不存在于该计算机上,您该怎么办 谢谢在执行该过程之前,请阅读注册表,查看是否有与文件扩展名关联的程序。开始。查看HKEY\U CLASSES\U ROOT\.csv以查看谁已注册以处理该文件扩展名(如果有的话)。如果您的应用程序

大家好,

在尝试使用Process时,我在测试的一台计算机上遇到以下异常。请开始打开一个.csv文件。我认为这是因为没有为该框上的.csv文件设置文件关联

那么你如何避免这种情况呢

强制进程。是否开始在记事本中打开?-理想情况下,它应该在excel中打开,但如果excel不存在于该计算机上,您该怎么办


谢谢

在执行该过程之前,请阅读注册表,查看是否有与文件扩展名关联的程序。开始。查看
HKEY\U CLASSES\U ROOT\.csv
以查看谁已注册以处理该文件扩展名(如果有的话)。

如果您的应用程序依赖于Excel的安装来正常有效地工作,请向用户发送有关该文件扩展名的bug。捕获异常,并弹出一个通知告诉他们有关问题,但在该通知中,为他们提供一个选项,以便在记事本等替代编辑器中打开该异常

这一切都可以归结为良好的用户体验——告诉用户,但这样做的方式是,你通过提供继续的选项来授权他们,而不是在出现这样的小问题时阻碍他们并停止

编辑:完全按照您正在做的做-不要假设他们有Excel,他们可能有其他浏览器/编辑器,如OpenOffice。无论注册到csv的是什么,让它做它自己的事情。不要试图亲自去检查文件关联,你的应用程序可能(可能不会)没有足够的权限在注册表中到处搜索

您还需要检查其他明显的异常原因,例如用户没有打开目标文件的权限,这可能是由于文件夹或文件本身受到限制。可能文件被锁定是因为它在另一个进程中仍处于打开状态。您的Process.Start可能失败的原因有很多


捕获异常,如果原因是没有与文件关联的应用程序,则向他们提供选项。如果用户选择使用记事本,请尝试在记事本中打开文件,但仍要注意异常。记事本是一个不错的选择,它不会锁定文件,但仍受文件夹/文件ACL的约束。

如果您将ProcessStartInfo.ErrorDialog设置为true,则用户将收到标准windows对话框的提示:请参见

,如果没有任何关联,该怎么办?在记事本中强制打开(我说假设大多数xp框都会有这样的功能是相当安全的),如果有关联,是否会打开关联的应用程序?希望您能够很容易地从注册表中获取进程名?…如果没有与处理文件类型相关联的内容,那么如何处理它取决于您-记事本可能是一个不错的选择。如果查看注册表表明已注册某些内容来处理文件类型,我会让Process.Start处理实际解密注册表打开谓词等的详细信息。这在尝试使用XPS writer的基础上帮助了我。我添加了此限制。它不依赖于它-但对于用户来说,读取这样的CSV文件要容易得多。如何检查是否安装了excel?您的回答很有道理。干杯
UnhandledException: System.ComponentModel.Win32Exception: No application is associated with the specified file for this operation
   at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
   at System.Diagnostics.Process.Start()
   at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
   at System.Diagnostics.Process.Start(String fileName)