【问题标题】:No application is associated with the specified file exception没有应用程序与指定的文件异常相关联
【发布时间】:2011-02-07 17:13:38
【问题描述】:
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在那台计算机上不存在怎么办?

谢谢

【问题讨论】:

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


    【解决方案1】:

    如果您设置 ProcessStartInfo.ErrorDialog = true,则用户将收到一个标准窗口对话框提示:请参阅here

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

      • 它不依赖于它——但对于用户来说,读取这样的 CSV 文件要容易得多。如何检查是否安装了excel?
      • 您的回答很有道理。干杯
      【解决方案3】:

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

      【讨论】:

      • 如果没有关联怎么办?强制在记事本中打开(id 说它相当安全,假设大多数 xp 盒子都会有这个),如果有关联 - 用关联的应用程序打开?希望您能够轻松地从注册表中获取进程名称?...
      • 如果没有任何关联来处理文件类型,那么您如何处理它取决于您 - 记事本可能是一个不错的选择。如果您查看注册表表明已注册某些内容来处理文件类型,我会让 Process.Start 处理实际破译注册表 Open 动词等的细节。
      • 这有助于我尝试使用 XPS 编写器,我已添加此限制。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多