Приложение не корректно работает с аргументами запуска

После запуска приложения, если попытаться открыть файл связанный с приложением через реестр, приложение не реагирует.

Если же приложение не было запущено и попытаться открыть связанный файл, приложение открываетсяя и сразу закрывается.

public partial class App : Application
{
    private static Mutex _mutex;
    private const string MutexName = "GeekBrowserMutex";

    protected override void OnStartup(StartupEventArgs e)
    {
        bool createdNew;
        _mutex = new Mutex(true, MutexName, out createdNew);

        if (!createdNew)
        {
            Current.Shutdown();
        }

        Properties["StartupArgs"] = e.Args;

        base.OnStartup(e);
    }
}

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    SettingsManipulaitor manipulaitor = new SettingsManipulaitor();

    private async void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        string[] appSettings = manipulaitor.GetSettings();
        string browserLocale = "ru-RU";
        bool useDarkMode = false;

        foreach (string setting in appSettings)
        {
            string[] _setting = setting.Split(' ');

            switch (_setting[0])
            {
                case "Theme=":
                    if (_setting[1] == "LightTheme")
                        useDarkMode = false;
                break;
                case "WebLanguage=":
                    if (_setting[1] == "Russian")
                        browserLocale = "ru-RU";       // Русский (Россия)
                    break;
            }
        }

        // Инициализация CefSharp
        manipulaitor.InitializeCef(useDarkMode, browserLocale);

        BaseMainPage mainPage = new BaseMainPage();

        await manipulaitor.LoadSettings(null, mainPage);

        // Получаем аргументы запуска
        if (Application.Current.Properties["StartupArgs"] is string[] args && args.Length > 0)
        {
            ProcessArguments(args, mainPage);
        }

        MainFrame.Navigate(mainPage);
    }

    private void ProcessArguments(string[] args, BaseMainPage mainPage)
    {
        foreach (var arg in args)
        {
            var cleanArg = arg.Trim('"'); // Удаляем кавычки

            if (IsValidUrl(cleanArg))
            {
                mainPage.InternetRequest(mainPage.mainSearchSystem, cleanArg);
            }
            else if (System.IO.File.Exists(cleanArg))
            {
                // Для файлов используем file:// протокол
                mainPage.InternetRequest(mainPage.mainSearchSystem, $"file:///{cleanArg}");
            }
        }
    }

    private bool IsValidUrl(string input)
    {
        return Uri.TryCreate(input, UriKind.Absolute, out Uri uri)
            && (uri.Scheme == Uri.UriSchemeHttp
                || uri.Scheme == Uri.UriSchemeHttps
                || uri.Scheme == Uri.UriSchemeFile);
    }
}

UPD: Я уже пытался отладить приложение, смотрел события Windows и всё безрезультатно. Просто так я бы не задавал вопрос. Что касается "открыть файл связанный с приложением через реестр", это значит что тип файла который я открываю связан с моим приложением в реестре. Говоря иначе, приложение назначено для открытия файлов какого-либо типа по умолчанию.

UPD_1: Никаких исключений и тому подобного не появляется, просто приложение закрывается. Более подробно о проблеме расписал в комментариях.


Ответы (0 шт):