mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-08 12:18:50 +02:00
Refactoring command args and change the signal instance implement.
This commit is contained in:
134
Wox/App.xaml.cs
134
Wox/App.xaml.cs
@@ -1,115 +1,49 @@
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Windows;
|
||||
using System.Windows.Forms;
|
||||
using System.Windows.Threading;
|
||||
using Microsoft.VisualBasic.ApplicationServices;
|
||||
using Wox;
|
||||
using Wox.Commands;
|
||||
using Wox.CommandArgs;
|
||||
using Wox.Helper;
|
||||
using Wox.Helper.ErrorReporting;
|
||||
using Application = System.Windows.Application;
|
||||
using MessageBox = System.Windows.MessageBox;
|
||||
using MessageBoxOptions = System.Windows.Forms.MessageBoxOptions;
|
||||
using StartupEventArgs = System.Windows.StartupEventArgs;
|
||||
using UnhandledExceptionEventArgs = System.UnhandledExceptionEventArgs;
|
||||
|
||||
namespace Wox {
|
||||
public static class EntryPoint {
|
||||
[STAThread]
|
||||
[System.Diagnostics.DebuggerStepThrough]
|
||||
public static void Main(string[] args) {
|
||||
AppDomain.CurrentDomain.UnhandledException += ErrorReporting.UnhandledExceptionHandle;
|
||||
System.Windows.Forms.Application.ThreadException += ErrorReporting.ThreadException;
|
||||
namespace Wox
|
||||
{
|
||||
public partial class App : Application, ISingleInstanceApp
|
||||
{
|
||||
private const string Unique = "Wox_Unique_Application_Mutex";
|
||||
public static MainWindow Window { get; private set; }
|
||||
|
||||
// don't combine Main and Entry since Microsoft.VisualBasic may be unable to load
|
||||
// seperating them into two methods can make error reporting have the chance to catch exception
|
||||
Entry(args);
|
||||
}
|
||||
[STAThread]
|
||||
public static void Main()
|
||||
{
|
||||
if (SingleInstance<App>.InitializeAsFirstInstance(Unique))
|
||||
{
|
||||
var application = new App();
|
||||
application.InitializeComponent();
|
||||
application.Run();
|
||||
SingleInstance<App>.Cleanup();
|
||||
}
|
||||
}
|
||||
|
||||
[System.Diagnostics.DebuggerStepThrough]
|
||||
private static void Entry(string[] args) {
|
||||
SingleInstanceManager manager = new SingleInstanceManager();
|
||||
manager.Run(args);
|
||||
}
|
||||
}
|
||||
protected override void OnStartup(StartupEventArgs e)
|
||||
{
|
||||
base.OnStartup(e);
|
||||
DispatcherUnhandledException += ErrorReporting.DispatcherUnhandledException;
|
||||
AppDomain.CurrentDomain.UnhandledException += ErrorReporting.UnhandledExceptionHandle;
|
||||
System.Windows.Forms.Application.ThreadException += ErrorReporting.ThreadException;
|
||||
|
||||
// Using VB bits to detect single instances and process accordingly:
|
||||
// * OnStartup is fired when the first instance loads
|
||||
// * OnStartupNextInstance is fired when the application is re-run again
|
||||
// NOTE: it is redirected to this instance thanks to IsSingleInstance
|
||||
[System.Diagnostics.DebuggerStepThrough]
|
||||
public class SingleInstanceManager : WindowsFormsApplicationBase {
|
||||
App app;
|
||||
Window = new MainWindow();
|
||||
CommandArgsFactory.Execute(e.Args.ToList());
|
||||
}
|
||||
|
||||
public SingleInstanceManager() {
|
||||
this.IsSingleInstance = true;
|
||||
}
|
||||
|
||||
protected override bool OnStartup(Microsoft.VisualBasic.ApplicationServices.StartupEventArgs e) {
|
||||
// First time app is launched
|
||||
app = new App();
|
||||
//app.InitializeComponent();
|
||||
app.Run();
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs) {
|
||||
// Subsequent launches
|
||||
base.OnStartupNextInstance(eventArgs);
|
||||
app.Activate(eventArgs.CommandLine.ToArray());
|
||||
}
|
||||
}
|
||||
|
||||
public partial class App : Application {
|
||||
|
||||
private static MainWindow window;
|
||||
|
||||
public static MainWindow Window {
|
||||
get {
|
||||
return window;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnStartup(StartupEventArgs e) {
|
||||
this.DispatcherUnhandledException += ErrorReporting.DispatcherUnhandledException;
|
||||
|
||||
base.OnStartup(e);
|
||||
|
||||
//for install plugin command when wox didn't start up
|
||||
//we shouldn't init MainWindow, just intall plugin and exit.
|
||||
if (e.Args.Length > 0 && e.Args[0].ToLower() == "installplugin") {
|
||||
var path = e.Args[1];
|
||||
if (!File.Exists(path)) {
|
||||
MessageBox.Show("Plugin " + path + " didn't exist");
|
||||
return;
|
||||
}
|
||||
PluginInstaller.Install(path);
|
||||
Environment.Exit(0);
|
||||
}
|
||||
|
||||
if (e.Args.Length > 0 && e.Args[0].ToLower() == "plugindebugger") {
|
||||
var path = e.Args[1];
|
||||
PluginLoader.Plugins.ActivatePluginDebugger(path);
|
||||
}
|
||||
|
||||
window = new MainWindow();
|
||||
if (e.Args.Length == 0 || e.Args[0].ToLower() != "hidestart") {
|
||||
window.ShowApp();
|
||||
}
|
||||
|
||||
window.ParseArgs(e.Args);
|
||||
}
|
||||
|
||||
public void Activate(string[] args) {
|
||||
if (args.Length == 0 || args[0].ToLower() != "hidestart") {
|
||||
window.ShowApp();
|
||||
}
|
||||
window.ParseArgs(args);
|
||||
}
|
||||
}
|
||||
public bool OnActivate(IList<string> args)
|
||||
{
|
||||
CommandArgsFactory.Execute(args);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user