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

时间:2010-04-14 00:51:49

标签: c# exception-handling notepad process.start win32exception

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)

大家好,

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

那你怎么能避免这种情况呢?

强制Process.Start在记事本中打开? - 理想情况下它应该在excel中打开,但是如果excel在那台计算机上不存在怎么办?

由于

3 个答案:

答案 0 :(得分:4)

如果您的应用程序依赖于安装的Excel以正常有效地工作,那么就会让用户误解它。捕获异常,然后弹出通知告诉他们有关问题的信息,然后在该通知中为他们提供在备用编辑器(如记事本)中打开它的选项。

这一切都归结为良好的用户体验 - 告诉用户,但这样做是为了让你通过提供继续选项来赋予他们权力,而不仅仅是在他们的方式中停下来并在发生类似这样的小问题时停止。

编辑:完全按照您的要求行事 - 不要假设他们有Excel,他们可能有其他一些查看器/编辑器,如OpenOffice。无论注册到csv,让它做到这一点。不要试图自己检查文件关联,你的应用程序可能没有(可能不会)有足够的权限在注册表中进行挖掘。

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

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

答案 1 :(得分:4)

如果您设置ProcessStartInfo.ErrorDialog = true,则会在标准窗口对话框中提示用户:请参阅here

答案 2 :(得分:2)

在执行process.start之前,请阅读注册表以查看是否存在与文件扩展名关联的程序。查看HKEY_CLASSES_ROOT\.csv以查看谁已注册处理该文件扩展名(如果有)。