是否值得从C#应用程序打开一个文件时,它在注册表中查找默认的应用程序?
题
我建立一个应用程序(一个侧项目,该项目很可能会争取在不止一个场合计算器社会的帮助下),这将需要打开各种文件类型(在Word IE中打开Word文档,本身不在我的应用程序)。
我一直在玩一些代码用于查找用于在注册表中的文件类型的默认应用程序,并把该给的Process.Start()。似乎有这种方法的两个问题:
1)应用程序的名称是引用在一些情况下,而不是在其他。结果 2)的Process.Start()要求的应用程序路径和它的参数是分开(即的Process.Start( “Notepad.exe的” 通过,@ “C:\ myfile.txt的”);而不是的Process.Start(@“记事本.EXE C:\ myfile.txt的“);)
这意味着,当我检索从注册表的路径,我将它拆分(确定后,如果我需要拆分对引号或空格),以确定哪些部分是应用程序的路径和什么部分参数,然后将那些分别到的Process.Start()。
在替代似乎是刚刚通过的文件名,如的Process.Start(@“C:\ myfile.txt的”),但我认为这只能如果应用程序是在Path环境变量
哪种方式更好?在注册表中的情况下,是有如何做参数解析的常见解决方案?
感谢您的任何和所有帮助!
<强>更新强>结果 我想简单的答案是“不”结果 好像我是真的要矫枉过正的路线,并且,每当有一个在注册表中的相关值传递不仅是文件名会工作。即什么是我在注册表中找到自己,的Process.Start()已经知道该怎么做。
我发现,当我试图用这个“新”类型的文件,我得到一个Win32Exception指出“没有应用程序与此操作的指定文件关联”。弗雷德里克·莫克提到了一个评论,这并不在Vista对他产生。什么是处理这个问题的正确方法?
解决方案
如果扩展注册到具有一定的应用程序打开,它并不需要在PATH才能运行。
其他提示
应用程序并不需要在PATH如果你只指定的文件名。下面的代码工作对我罚款:
System.Diagnostics.Process.Start(@"C:\Users\Dan\Desktop\minors.pdf");
您通常并不需要查找的程序注册的类型,程序通常不会需要在PATH环境变量。通常在注册表中的命令包含完整路径。这是.KML文件的命令(谷歌地球)的样子(我的电脑):
C:\Program Files\Google\Google Earth\googleearth.exe "%1"
鉴于这种情况,你可以放心地只使用Process.Start
与文档文件的名字连在一起。它应该是该文件类型未注册,你将调用这个默认的Windows行为(要求你用,等哪个程序)。