从C#应用程序打开文件时,是否值得在注册表中查找默认应用程序?

Age*_*rum 0 c# registry file-type

我正在构建一个应用程序(一个可能不止一次得到stackoverflow社区帮助的副项目),它需要打开各种文件类型(即在Word中打开Word文档,而不是在我的应用程序中本机打开) ).

我一直在玩一些代码,用于在注册表中查找文件类型的默认应用程序,并将其传递给Process.Start().这种方法似乎有两个问题:

1)在某些情况下引用应用程序名称,而在其他情况下不引用.
2)Process.Start()要求应用程序路径及其参数分别传递(即Process.Start("notepad.exe",@"C:\ myfile.txt");而不是Process.Start(@"notepad) .exe C:\ myfile.txt");).

这意味着当我从注册表中检索路径时,我必须将其拆分(在确定是否需要拆分引号或空格之后)以确定应用程序路径的哪个部分以及哪些部分是参数,然后将它们分别传递给Process.开始().

替代方案似乎只是传递文件名,如Process.Start(@"C:\ myfile.txt"),但我认为只有在应用程序位于Path环境变量中时才有效.

哪种方式更好?在注册表的情况下,是否有一个常见的解决方案来解析参数?

感谢您的帮助!

更新:
我想简短的回答是'不'
看起来我真的想要过度杀伤路线,并且只要文件名传递,只要注册表中有相关​​值,它就会起作用.即我在注册表中找到的任何东西,Process.Start()已经知道该怎么做了.

我确实发现当我尝试使用"新"文件类型时,我得到一个Win32Exception,声明"没有应用程序与此操作的指定文件相关联." FredrikMörk在评论中提到他在Vista中不会发生这种情况.处理这个问题的正确方法是什么?

Tal*_*man 5

如果注册扩展名是使用某个应用程序打开的,则不需要在PATH中运行.