2017-02-26 19:23:31 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using Microsoft.Win32;
|
|
|
|
|
|
2020-04-23 08:16:16 +00:00
|
|
|
|
namespace HeliosPlus.Shared
|
2017-02-26 19:23:31 +00:00
|
|
|
|
{
|
|
|
|
|
public class Helios
|
|
|
|
|
{
|
|
|
|
|
public static string Address
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
using (
|
|
|
|
|
var key =
|
2020-04-29 10:29:43 +00:00
|
|
|
|
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\HeliosPlus", false))
|
2017-02-26 19:23:31 +00:00
|
|
|
|
{
|
|
|
|
|
var executableAddress = key?.GetValue(@"ExecutableAddress", null) as string;
|
2018-10-20 00:27:25 +00:00
|
|
|
|
|
2017-02-26 19:23:31 +00:00
|
|
|
|
if (!string.IsNullOrWhiteSpace(executableAddress) && File.Exists(executableAddress))
|
2018-10-20 00:27:25 +00:00
|
|
|
|
{
|
2017-02-26 19:23:31 +00:00
|
|
|
|
return executableAddress;
|
2018-10-20 00:27:25 +00:00
|
|
|
|
}
|
2017-02-26 19:23:31 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
// ignored
|
|
|
|
|
}
|
2018-10-20 00:27:25 +00:00
|
|
|
|
|
2017-02-26 19:23:31 +00:00
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-10-20 00:27:25 +00:00
|
|
|
|
public static bool IsInstalled
|
|
|
|
|
{
|
|
|
|
|
get => !string.IsNullOrWhiteSpace(Address);
|
|
|
|
|
}
|
2017-02-26 19:23:31 +00:00
|
|
|
|
|
2018-10-20 00:08:30 +00:00
|
|
|
|
// ReSharper disable once MethodTooLong
|
|
|
|
|
// ReSharper disable once TooManyArguments
|
2018-10-20 00:27:25 +00:00
|
|
|
|
public static void Open(
|
|
|
|
|
HeliosStartupAction action = HeliosStartupAction.None,
|
2020-06-07 08:48:45 +00:00
|
|
|
|
ProfileItem profile = null,
|
2018-10-20 00:27:25 +00:00
|
|
|
|
string programAddress = null,
|
|
|
|
|
bool asAdmin = false)
|
2017-02-26 19:23:31 +00:00
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (!IsInstalled)
|
2018-10-20 00:27:25 +00:00
|
|
|
|
{
|
2017-02-26 19:23:31 +00:00
|
|
|
|
return;
|
2018-10-20 00:27:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-02-26 19:23:31 +00:00
|
|
|
|
var args = new List<string> {$"-a {action}"};
|
2018-10-20 00:27:25 +00:00
|
|
|
|
|
2017-02-26 19:23:31 +00:00
|
|
|
|
if (profile != null)
|
2018-10-20 00:27:25 +00:00
|
|
|
|
{
|
2020-06-14 04:20:52 +00:00
|
|
|
|
args.Add($"-p \"{profile.UUID}\"");
|
2018-10-20 00:27:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-02-26 19:23:31 +00:00
|
|
|
|
if (!string.IsNullOrWhiteSpace(programAddress))
|
2018-10-20 00:27:25 +00:00
|
|
|
|
{
|
2017-02-26 19:23:31 +00:00
|
|
|
|
args.Add($"-e \"{programAddress}\"");
|
2018-10-20 00:27:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-02-26 19:23:31 +00:00
|
|
|
|
var processInfo = new ProcessStartInfo(Address, string.Join(" ", args))
|
|
|
|
|
{
|
|
|
|
|
UseShellExecute = true
|
|
|
|
|
};
|
2018-10-20 00:27:25 +00:00
|
|
|
|
|
2017-02-26 19:23:31 +00:00
|
|
|
|
if (asAdmin)
|
2018-10-20 00:27:25 +00:00
|
|
|
|
{
|
2017-02-26 19:23:31 +00:00
|
|
|
|
processInfo.Verb = @"runas";
|
2018-10-20 00:27:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-02-26 19:23:31 +00:00
|
|
|
|
Process.Start(processInfo);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
// Check if operation canceled by user
|
|
|
|
|
if ((e as Win32Exception)?.NativeErrorCode == 1223)
|
2018-10-20 00:27:25 +00:00
|
|
|
|
{
|
2017-02-26 19:23:31 +00:00
|
|
|
|
return;
|
2018-10-20 00:27:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-02-26 19:23:31 +00:00
|
|
|
|
throw;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void OpenSteamGame(
|
2018-10-20 00:27:25 +00:00
|
|
|
|
HeliosStartupAction action = HeliosStartupAction.None,
|
2020-06-07 08:48:45 +00:00
|
|
|
|
ProfileItem profile = null,
|
2017-02-26 19:23:31 +00:00
|
|
|
|
uint steamAppId = 0)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (!IsInstalled)
|
2018-10-20 00:27:25 +00:00
|
|
|
|
{
|
2017-02-26 19:23:31 +00:00
|
|
|
|
return;
|
2018-10-20 00:27:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-02-26 19:23:31 +00:00
|
|
|
|
var args = new List<string> {$@"-a {action}"};
|
2018-10-20 00:27:25 +00:00
|
|
|
|
|
2017-02-26 19:23:31 +00:00
|
|
|
|
if (profile != null)
|
2018-10-20 00:27:25 +00:00
|
|
|
|
{
|
2020-06-14 04:20:52 +00:00
|
|
|
|
args.Add($"-p \"{profile.UUID}\"");
|
2018-10-20 00:27:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-02-26 19:23:31 +00:00
|
|
|
|
if (steamAppId > 0)
|
2018-10-20 00:27:25 +00:00
|
|
|
|
{
|
2017-02-26 19:23:31 +00:00
|
|
|
|
args.Add($"-s \"{steamAppId}\"");
|
2018-10-20 00:27:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-02-26 19:23:31 +00:00
|
|
|
|
var processInfo = new ProcessStartInfo(Address, string.Join(" ", args))
|
|
|
|
|
{
|
|
|
|
|
UseShellExecute = true
|
|
|
|
|
};
|
|
|
|
|
Process.Start(processInfo);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
// Check if operation canceled by user
|
|
|
|
|
if ((e as Win32Exception)?.NativeErrorCode == 1223)
|
2018-10-20 00:27:25 +00:00
|
|
|
|
{
|
2017-02-26 19:23:31 +00:00
|
|
|
|
return;
|
2018-10-20 00:27:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-02-26 19:23:31 +00:00
|
|
|
|
throw;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|