【发布时间】:2011-01-09 19:18:15
【问题描述】:
我正在使用 C# 构建一个 Windows 窗体应用程序,当用户单击具有自定义扩展名的文件时需要启动该应用程序(例如 filename.mycustomextension) 我打算在 filename.mycustomextension 文件中放一个 url。当用户点击这个文件时,我们的 winform 应用程序应该启动并读取这个文件的内容。 可以这样做吗?
【问题讨论】:
我正在使用 C# 构建一个 Windows 窗体应用程序,当用户单击具有自定义扩展名的文件时需要启动该应用程序(例如 filename.mycustomextension) 我打算在 filename.mycustomextension 文件中放一个 url。当用户点击这个文件时,我们的 winform 应用程序应该启动并读取这个文件的内容。 可以这样做吗?
【问题讨论】:
首先,最明显的是,您需要通过 shell 中的“打开方式”、安装程序或直接在注册表中将文件扩展名与应用程序相关联。
MSDN - Best Practices for File Associations
然后从那里开始它真的很简单。
static class Program
{
[STAThread]
static void Main()
{
string[] args = Environment.GetCommandLineArgs();
string text = File.ReadAllText(args[1]);
// ...
}
}
临时我找不到任何简单地展示所有这些的示例,但 Scott Hanselman 有一个很好的示例,通过单个实例 WinForms 应用程序加载文件,大致相同...
http://www.hanselman.com/blog/CommentView.aspx?guid=d2f676ea-025b-4fd6-ae79-80b04a34f24c
【讨论】:
是的,有可能。
这个想法是,当您的应用程序被点击时,您修改注册表项,以将扩展文件与您的应用程序相关联。
以下是草图:
FileAssociation 类。这是一个例子:
var FA = new FileAssociation();
FA.Extension = "blah";
FA.ContentType = "application/blah";
FA.FullName = "blah Project File";
FA.ProperName = "blahFile";
FA.AddCommand("open", string.Format("\"{0}\" \"%1\"", System.Reflection.Assembly.GetExecutingAssembly().Location));
//"C:\\mydir\\myprog.exe %1");
FA.IconPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
FA.IconIndex = 0;
FA.Create();
【讨论】:
如果您打算从浏览器启动您的应用程序,则存在安全问题,但除此之外 - 是的。
您只需在用户的机器上安装应用程序并将您的 .mycustomextension 与应用程序相关联。 http://support.microsoft.com/kb/185453
【讨论】: