Skip to content

Commit ef3e4bb

Browse files
committed
-Fixed pathing bugs with loading assemblies
-Added proper service support to SEServerExtender -Added service installer to SEServerExtender
1 parent c17d650 commit ef3e4bb

6 files changed

Lines changed: 96 additions & 5 deletions

File tree

SEModAPIInternal/API/Common/SandboxGameAssemblyWrapper.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ protected SandboxGameAssemblyWrapper()
8989
m_isUsingCommonProgramData = false;
9090
m_isInSafeMode = false;
9191

92-
m_assembly = Assembly.UnsafeLoadFrom("Sandbox.Game.dll");
92+
string assemblyPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Sandbox.Game.dll");
93+
m_assembly = Assembly.UnsafeLoadFrom(assemblyPath);
9394

9495
m_lastProfilingOutput = DateTime.Now;
9596
m_countQueuedActions = 0;

SEModAPIInternal/API/Server/ServerAssemblyWrapper.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System;
66
using System.Collections.Generic;
77
using System.ComponentModel;
8+
using System.IO;
89
using System.Runtime.InteropServices;
910
using System.Linq;
1011
using System.Reflection;
@@ -43,7 +44,8 @@ protected ServerAssemblyWrapper()
4344
{
4445
m_instance = this;
4546

46-
m_assembly = Assembly.UnsafeLoadFrom("SpaceEngineersDedicated.exe");
47+
string assemblyPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SpaceEngineersDedicated.exe");
48+
m_assembly = Assembly.UnsafeLoadFrom(assemblyPath);
4749

4850
Console.WriteLine("Finished loading ServerAssemblyWrapper");
4951
}

SEServerExtender/Program.cs

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.ServiceModel;
66
using System.ServiceModel.Description;
77
using System.ServiceModel.Web;
8+
using System.ServiceProcess;
89

910
using SEModAPI.Support;
1011

@@ -18,19 +19,61 @@ namespace SEServerExtender
1819
{
1920
public static class Program
2021
{
22+
public class WindowsService : ServiceBase
23+
{
24+
public WindowsService()
25+
{
26+
this.ServiceName = "SEServerExtender";
27+
this.CanPauseAndContinue = false;
28+
this.CanStop = true;
29+
this.AutoLog = true;
30+
}
31+
32+
protected override void OnStart(string[] args)
33+
{
34+
LogManager.APILog.WriteLine("Starting SEServerExtender Service with " + args.Length.ToString() + " arguments ...");
35+
36+
Program.Start(args);
37+
}
38+
39+
protected override void OnStop()
40+
{
41+
LogManager.APILog.WriteLine("Stopping SEServerExtender Service ser...");
42+
43+
Program.Stop();
44+
}
45+
}
46+
2147
static SEServerExtender m_serverExtenderForm;
2248
static Server m_server;
2349

2450
/// <summary>
2551
/// Main entry point of the application
2652
/// </summary>
2753
static void Main(string[] args)
54+
{
55+
if (!Environment.UserInteractive)
56+
{
57+
using (var service = new WindowsService())
58+
{
59+
ServiceBase.Run(service);
60+
}
61+
}
62+
else
63+
{
64+
Start(args);
65+
}
66+
}
67+
68+
private static void Start(string[] args)
2869
{
2970
//Setup error handling for unmanaged exceptions
3071
AppDomain.CurrentDomain.UnhandledException += AppDomain_UnhandledException;
3172
Application.ThreadException += Application_ThreadException;
3273
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
3374

75+
LogManager.APILog.WriteLine("Starting SEServerExtender with " + args.Length.ToString() + " arguments ...");
76+
3477
CommandLineArgs extenderArgs = new CommandLineArgs();
3578

3679
//Setup the default args
@@ -139,6 +182,7 @@ static void Main(string[] args)
139182
{
140183
extenderArgs.noConsole = true;
141184
extenderArgs.noGUI = true;
185+
extenderArgs.autoStart = true;
142186
}
143187

144188
if (extenderArgs.debug)
@@ -175,7 +219,7 @@ static void Main(string[] args)
175219
}
176220
catch (AutoException eEx)
177221
{
178-
if(!extenderArgs.noConsole)
222+
if (!extenderArgs.noConsole)
179223
Console.WriteLine("AutoException - " + eEx.AdditionnalInfo + "\n\r" + eEx.GetDebugString());
180224
if (!extenderArgs.noGUI)
181225
MessageBox.Show(eEx.AdditionnalInfo + "\n\r" + eEx.GetDebugString(), @"SEServerExtender", MessageBoxButtons.OK, MessageBoxIcon.Error);
@@ -205,6 +249,14 @@ static void Main(string[] args)
205249
}
206250
}
207251

252+
private static void Stop()
253+
{
254+
if(m_server != null && m_server.IsRunning)
255+
m_server.StopServer();
256+
if (m_serverExtenderForm != null && m_serverExtenderForm.Visible == true)
257+
m_serverExtenderForm.Close();
258+
}
259+
208260
static void Application_ThreadException(Object sender, ThreadExceptionEventArgs e)
209261
{
210262
Console.WriteLine("Application.ThreadException - " + e.Exception.ToString());

SEServerExtender/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,5 @@
2929
// Build Number
3030
// Revision
3131
//
32-
[assembly: AssemblyVersion("0.2.10.5")]
33-
[assembly: AssemblyFileVersion("0.2.10.5")]
32+
[assembly: AssemblyVersion("0.2.10.6")]
33+
[assembly: AssemblyFileVersion("0.2.10.6")]

SEServerExtender/SEServerExtender.csproj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,11 @@
5858
</Reference>
5959
<Reference Include="System" />
6060
<Reference Include="System.Core" />
61+
<Reference Include="System.Configuration.Install" />
6162
<Reference Include="System.Drawing" />
6263
<Reference Include="System.ServiceModel" />
6364
<Reference Include="System.ServiceModel.Web" />
65+
<Reference Include="System.ServiceProcess" />
6466
<Reference Include="System.Windows.Forms" />
6567
<Reference Include="System.Xml.Linq" />
6668
<Reference Include="System.Data.DataSetExtensions" />
@@ -95,6 +97,9 @@
9597
</Compile>
9698
<Compile Include="Program.cs" />
9799
<Compile Include="Properties\AssemblyInfo.cs" />
100+
<Compile Include="Service.cs">
101+
<SubType>Component</SubType>
102+
</Compile>
98103
<Compile Include="SEServerExtender.cs">
99104
<SubType>Form</SubType>
100105
</Compile>

SEServerExtender/Service.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.ComponentModel;
4+
using System.Configuration.Install;
5+
using System.Linq;
6+
using System.ServiceProcess;
7+
using System.Text;
8+
9+
namespace SEServerExtender
10+
{
11+
[RunInstaller(true)]
12+
public class WindowsServiceInstaller : Installer
13+
{
14+
private ServiceInstaller serviceInstaller;
15+
private ServiceProcessInstaller processInstaller;
16+
17+
public WindowsServiceInstaller()
18+
{
19+
processInstaller = new ServiceProcessInstaller();
20+
serviceInstaller = new ServiceInstaller();
21+
22+
processInstaller.Account = ServiceAccount.LocalSystem;
23+
serviceInstaller.StartType = ServiceStartMode.Manual;
24+
serviceInstaller.ServiceName = "SEServerExtender";
25+
serviceInstaller.Description = "Service for running SEServerExtender";
26+
27+
Installers.Add(serviceInstaller);
28+
Installers.Add(processInstaller);
29+
}
30+
}
31+
}

0 commit comments

Comments
 (0)