Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Open custom file with own application [duplicate]

Possible Duplicate:
How to associate a file extension to the current executable in C#

So, I'm making an application for school (final project).

In this application, I have a Project-class. This can be saved as a custom file, e.g. Test.gpr. (.gpr is the extension).

How can I let windows/my application associate the .gpr file with this application, so that if I doubleclick the .gpr file, my application fires and opens the file (so launches the OpenProject method - This loads the project).

I am NOT asking how to let windows associate a file type with an application, I am asking how to catch this in my code in Visual Studio 2012.

UPDATE: Since my question seems to be not so clear:

atm, I've done nothing, so I can follow whatever is the best solution. All I want is to doubleclick the .gpr, make sure windows knows to open it with my app, and catch the filepath in my application.

Any help is greatly appreciated!

like image 853
voluminat0 Avatar asked Nov 30 '12 22:11

voluminat0


1 Answers

When you open a file with an application, the path to that file is passed as the first command line argument.

In C#, this is args[0] of your Main method.

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

In case your project is an WPF application, in your App.xaml add a Startup event handler:

<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>

Your command line arguments will now be in e.Args of the Application_Startup event handler:

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
        }
    }
}
like image 105
neeKo Avatar answered Oct 30 '22 20:10

neeKo