none
Launch Default Application using Wine under Linux 20.04 RRS feed

  • Question

  • The following code catches on Wine with "Unrecognized file type or..."

                    try
                        {
                            System.Diagnostics.Process.Start(mConsole.SelectedText.Trim());
                        }
                    catch (System.ComponentModel.Win32Exception)
                        {
                        MessageBox.Show("Unrecognized file type and/or incomplete filename." +
                            "\r\n\r\nFile:    " + mConsole.SelectedText, "UNKNOWN");
                        }
                    catch (System.InvalidOperationException)
                        {
                        ; // ignore hitting a blank line, etc.
                        }

    The following commands work fine from Linux command line...

    xdg-open notes.txt  or xdg-open stuff.jpg

    Putting "xdg-open" in the Process.Start argument doesn't help.

    Thanks, Bruce

    Thursday, October 22, 2020 12:20 PM

Answers

  • SOLVED:  Launch Default Application using Wine under Linux 20.04
    Compiler: Visual Studio 2017 on Windows 10. App running on Linux Ubuntu 20.04
    Code written by Bruce Arnold, 10/24/2020.

            public Form1()
                {
                InitializeComponent();
                InitializeConsole();
                // Check whether the WINE environment variable exists.
                string value = Environment.GetEnvironmentVariable("HOME");
                if (value != null)
                    {
                    Path.Text = "%HOME%";       // Ver 2.82 Linux Wine mod.
                    Wineflag = true;
                    }
                ...
                }
                
            // Launch the default application after first parsing the filename.
            //
            private void mConsole_DoubleClick(object sender, EventArgs e)
                {
                ...
                    try
                        {
                        if (Wineflag == true)   // Ver. 2.82, 2.85 for Linux, Ubuntu, etc.
                                                // Mono and Process.Start can't handle any path.
                                                // They get confused by any kind of slash.
                                                // New strategy is to separate path and filename.
                                                // Then, change dir and call Process.Start()
                                                //
                                                // Sample "userSelection":
                                                // /home/bruce/Documents/robots.txt
                                                // /home/bruce/Pictures/ZoomBackgrounds/aquarium01.jpg
                                                // (Linux standard is fwd_slashes, not backslashes.)
                            {
                            userSelection = mConsole.SelectedText.Trim();

                            string currentPath = Directory.GetCurrentDirectory();
                            int lastSlash = userSelection.LastIndexOf('/');         // separate path
                            string mPath = userSelection.Substring(0, lastSlash + 1);
                            string mArg = userSelection.Substring(lastSlash + 1);   // separate arg
                            userSelection = mArg;   // reduce selection to only the filename.
                            Directory.SetCurrentDirectory(mPath);

                            Process mProcess = new Process();
                            ProcessStartInfo startInfo = new ProcessStartInfo("xdg-open", userSelection);
                            mProcess.StartInfo = startInfo;
                            mProcess.Start();
                            mProcess.WaitForExit();
                            mProcess.Close();

                            // MessageBox.Show("Process Complete");
                            Directory.SetCurrentDirectory(currentPath);             // restore path
                            }
                        else // This works fine on any Windows version.
                            {
                            userSelection = mConsole.SelectedText.Trim();
                            System.Diagnostics.Process.Start(userSelection);
                            }
                        }
                    catch (System.ComponentModel.Win32Exception)
                        {
                        MessageBox.Show("Unrecognized file type and/or incomplete filename." +
                            "\r\n\r\nFile:    " + userSelection, "UNKNOWN");
                        }
                    catch (System.InvalidOperationException)
                        {
                        MessageBox.Show("Invalid Operation Exception." +
                            "\r\n\r\nFile:    " + userSelection, "UNKNOWN");
                        // ignore hitting a blank line, etc.
                        }
               }
               
               
    • Marked as answer by Bruce Arnold Saturday, October 24, 2020 11:36 AM
    Saturday, October 24, 2020 11:33 AM

All replies

  • Andrew,

    The calling module has guaranteed that the whole filename is selected.  Thanks for the critique. 

    I also tried a "bash xdg-open foo.jpg" but that failed with the same error.  Someone said that it might be user rights issue but as I said it works in terminal mode.  I was optimistic in adding the "bash" prefix but it didn't help.

    Bruce

    Thursday, October 22, 2020 3:04 PM
  • SOLVED:  Launch Default Application using Wine under Linux 20.04
    Compiler: Visual Studio 2017 on Windows 10. App running on Linux Ubuntu 20.04
    Code written by Bruce Arnold, 10/24/2020.

            public Form1()
                {
                InitializeComponent();
                InitializeConsole();
                // Check whether the WINE environment variable exists.
                string value = Environment.GetEnvironmentVariable("HOME");
                if (value != null)
                    {
                    Path.Text = "%HOME%";       // Ver 2.82 Linux Wine mod.
                    Wineflag = true;
                    }
                ...
                }
                
            // Launch the default application after first parsing the filename.
            //
            private void mConsole_DoubleClick(object sender, EventArgs e)
                {
                ...
                    try
                        {
                        if (Wineflag == true)   // Ver. 2.82, 2.85 for Linux, Ubuntu, etc.
                                                // Mono and Process.Start can't handle any path.
                                                // They get confused by any kind of slash.
                                                // New strategy is to separate path and filename.
                                                // Then, change dir and call Process.Start()
                                                //
                                                // Sample "userSelection":
                                                // /home/bruce/Documents/robots.txt
                                                // /home/bruce/Pictures/ZoomBackgrounds/aquarium01.jpg
                                                // (Linux standard is fwd_slashes, not backslashes.)
                            {
                            userSelection = mConsole.SelectedText.Trim();

                            string currentPath = Directory.GetCurrentDirectory();
                            int lastSlash = userSelection.LastIndexOf('/');         // separate path
                            string mPath = userSelection.Substring(0, lastSlash + 1);
                            string mArg = userSelection.Substring(lastSlash + 1);   // separate arg
                            userSelection = mArg;   // reduce selection to only the filename.
                            Directory.SetCurrentDirectory(mPath);

                            Process mProcess = new Process();
                            ProcessStartInfo startInfo = new ProcessStartInfo("xdg-open", userSelection);
                            mProcess.StartInfo = startInfo;
                            mProcess.Start();
                            mProcess.WaitForExit();
                            mProcess.Close();

                            // MessageBox.Show("Process Complete");
                            Directory.SetCurrentDirectory(currentPath);             // restore path
                            }
                        else // This works fine on any Windows version.
                            {
                            userSelection = mConsole.SelectedText.Trim();
                            System.Diagnostics.Process.Start(userSelection);
                            }
                        }
                    catch (System.ComponentModel.Win32Exception)
                        {
                        MessageBox.Show("Unrecognized file type and/or incomplete filename." +
                            "\r\n\r\nFile:    " + userSelection, "UNKNOWN");
                        }
                    catch (System.InvalidOperationException)
                        {
                        MessageBox.Show("Invalid Operation Exception." +
                            "\r\n\r\nFile:    " + userSelection, "UNKNOWN");
                        // ignore hitting a blank line, etc.
                        }
               }
               
               
    • Marked as answer by Bruce Arnold Saturday, October 24, 2020 11:36 AM
    Saturday, October 24, 2020 11:33 AM