Приложение не корректно работает с аргументами запуска
После запуска приложения, если попытаться открыть файл связанный с приложением через реестр, приложение не реагирует.
Если же приложение не было запущено и попытаться открыть связанный файл, приложение открываетсяя и сразу закрывается.
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: Никаких исключений и тому подобного не появляется, просто приложение закрывается. Более подробно о проблеме расписал в комментариях.