tags:

views:

213

answers:

4

-Edit- I feel like an idiot. I had a feeling something like the answer below would work but didnt see any google results similar to the answers below. So when i saw this complex code i thought it had to be this way.

I searched and found this http://stackoverflow.com/questions/24954/windows-list-and-launch-applications-associated-with-an-extension however it didnt answer my question. With tweaks below i came up with the below. However it gets stuck on image files. Txt files run fine

I will update this code soon to account for app paths with spaces however i dont understand why image files dont launch.

static void launchFile(string fn)
        {
            //majority was taken from
            //http://stackoverflow.com/questions/24954/windows-list-and-launch-applications-associated-with-an-extension
            const string extPathTemplate = @"HKEY_CLASSES_ROOT\{0}";
            const string cmdPathTemplate = @"HKEY_CLASSES_ROOT\{0}\shell\open\command";

            string ext = Path.GetExtension(fn);

            var extPath = string.Format(extPathTemplate, ext);

            var docName = Registry.GetValue(extPath, string.Empty, string.Empty) as string;
            if (!string.IsNullOrEmpty(docName))
            {
                // 2. Find out which command is associated with our extension
                var associatedCmdPath = string.Format(cmdPathTemplate, docName);
                var associatedCmd = Registry.GetValue(associatedCmdPath, string.Empty, string.Empty) as string;

                if (!string.IsNullOrEmpty(associatedCmd))
                {
                    //Console.WriteLine("\"{0}\" command is associated with {1} extension", associatedCmd, ext);
                    var p = new Process();
                    p.StartInfo.FileName = associatedCmd.Split(' ')[0];
                    string s2 = associatedCmd.Substring(p.StartInfo.FileName.Length + 1);
                    s2 = s2.Replace("%1", string.Format("\"{0}\"", fn));
                    p.StartInfo.Arguments = s2;//string.Format("\"{0}\"", fn);
                    p.Start();
                }
            }
        }
A: 

What happens with those image files if you trying writing whatever the resulting debug statement is for them just on the command line?

Noon Silk
+8  A: 

Why not just try:

System.Diagnostics.Process.Start(filePath);

?

It will use the default program that would be opened as if you just clicked on it. Admittedly it doesn't let you choose the program that will run... but assuming that you want to mimic the behaviour that would be used if the user were to double-click on the file: this should work just fine.

SnOrfus
Aww, you *just* beat me :)
Matthew Iselin
hahaah I was just about to write the same thing :-) lol
baeltazor
+3  A: 

It really sounds like you're looking more for this:

System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "<whatever>";
proc.Start();
Matthew Iselin
+1  A: 

Assuming that you just want to launch files which already have some associated applications (eg: *.txt is associated with notepad), Use System.Diagnostics.Process.

e.g. :

 using System.Diagnostics;
    Process p = new Process();
    ProcessStartInfo pi = new ProcessStartInfo();
    pi.UseShellExecute = true;
    pi.FileName = @"MY_FILE_WITH_FULL_PATH.jpg";
    p.StartInfo = pi;

    try
    {
        p.Start();
    }
    catch (Exception Ex)
    {
        //MessageBox.Show(Ex.Message);
    }

Note: In my PC, the pic opens in Windows Picture & Fax Viewer since that is the default application for *.jpg files.

Ganesh R.