8
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 在那台计算机上不存在,你会怎么做?

谢谢

4

3 回答 3

5

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

于 2012-06-07T19:31:54.427 回答
4

如果您的应用程序依赖于安装的 Excel 才能正常有效地工作,那么请用户对此感到不满。捕获异常,并弹出一个通知告诉他们问题,然后在该通知中为他们提供一个选项,以在记事本等替代编辑器中打开它。

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

编辑:做你正在做的事情 - 不要假设他们有 Excel,他们可能有一些其他的查看器/编辑器,比如 OpenOffice。无论注册到 csv 的内容,都让它去做。不要尝试自己去检查文件关联,您的应用程序可能没有(可能不会)有足够的权限在注册表中四处搜寻。

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

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

于 2010-04-14T01:21:54.403 回答
3

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

于 2010-04-14T01:00:12.870 回答