5

可能重复:
如何将文件扩展名关联到 C# 中的当前可执行文件

所以,我正在申请学校(最终项目)。

在这个应用程序中,我有一个Project-class。这可以保存为自定义文件,例如测试。GPRS。(.gpr 是扩展名)。

如何让 Windows/我的应用程序将 .gpr 文件与此应用程序相关联,以便如果我双击 .gpr 文件,我的应用程序会触发并打开文件(因此启动 OpenProject 方法 - 这会加载项目)。

不是在问如何让 Windows 将文件类型与应用程序相关联,而是在问如何在 Visual Studio 2012 的代码中捕捉到这一点。

更新: 由于我的问题似乎不太清楚:

atm,我什么都没做,所以我可以遵循最好的解决方案。我想要的只是双击.gpr,确保windows知道用我的应用程序打开它,并在我的应用程序中捕获文件路径。

任何帮助是极大的赞赏!

4

1 回答 1

12

当您使用应用程序打开文件时,该文件的路径将作为第一个命令行参数传递。

在 C# 中,这是args[0]您的Main方法。

static void Main(string[] args)
{
    if(args.Length == 1) //make sure an argument is passed
    {
        FileInfo file = new FileInfo(args[0]);
        if(file.Exists) //make sure it's actually a file
        {
           //Do whatever
        }
    }

    //...
}

WPF

如果您的项目是 WPF 应用程序,请在您App.xaml添加Startup事件处理程序:

<Application x:Class="WpfApplication1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml"
             Startup="Application_Startup"> <!--this line added-->
    <Application.Resources>

    </Application.Resources>
</Application>

您的命令行参数现在将位于e.Args事件Application_Startup处理程序中:

private void Application_Startup(object sender, StartupEventArgs e)
{
    if(e.Args.Length == 1) //make sure an argument is passed
    {
        FileInfo file = new FileInfo(e.Args[0]);
        if(file.Exists) //make sure it's actually a file
        {
           //Do whatever
        }
    }
}
于 2012-11-30T22:57:36.620 回答