diff --git a/SafeExamBrowser.Service.UnitTests/Properties/AssemblyInfo.cs b/SafeExamBrowser.Service.UnitTests/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..724f7ce8
--- /dev/null
+++ b/SafeExamBrowser.Service.UnitTests/Properties/AssemblyInfo.cs
@@ -0,0 +1,17 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+[assembly: AssemblyTitle("SafeExamBrowser.Service.UnitTests")]
+[assembly: AssemblyDescription("Safe Exam Browser")]
+[assembly: AssemblyCompany("ETH Zürich")]
+[assembly: AssemblyProduct("SafeExamBrowser.Service.UnitTests")]
+[assembly: AssemblyCopyright("Copyright © 2019 ETH Zürich, Educational Development and Technology (LET)")]
+
+[assembly: ComVisible(false)]
+
+[assembly: Guid("26c4aaee-3902-400c-a154-63a357dea2f8")]
+
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: AssemblyInformationalVersion("1.0.0.0")]
diff --git a/SafeExamBrowser.Service.UnitTests/SafeExamBrowser.Service.UnitTests.csproj b/SafeExamBrowser.Service.UnitTests/SafeExamBrowser.Service.UnitTests.csproj
new file mode 100644
index 00000000..90149c69
--- /dev/null
+++ b/SafeExamBrowser.Service.UnitTests/SafeExamBrowser.Service.UnitTests.csproj
@@ -0,0 +1,67 @@
+
+
+  
+  
+  
+    Debug
+    AnyCPU
+    {26C4AAEE-3902-400C-A154-63A357DEA2F8}
+    Library
+    Properties
+    SafeExamBrowser.Service.UnitTests
+    SafeExamBrowser.Service.UnitTests
+    v4.7.2
+    512
+    {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+    15.0
+    $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+    $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages
+    False
+    UnitTest
+    
+    
+  
+  
+    true
+    full
+    false
+    bin\Debug\
+    DEBUG;TRACE
+    prompt
+    4
+  
+  
+    pdbonly
+    true
+    bin\Release\
+    TRACE
+    prompt
+    4
+  
+  
+    
+      ..\packages\MSTest.TestFramework.1.3.2\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll
+    
+    
+      ..\packages\MSTest.TestFramework.1.3.2\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll
+    
+    
+    
+  
+  
+    
+  
+  
+    
+  
+  
+  
+  
+    
+      This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
+    
+    
+    
+  
+  
+
\ No newline at end of file
diff --git a/SafeExamBrowser.Service.UnitTests/packages.config b/SafeExamBrowser.Service.UnitTests/packages.config
new file mode 100644
index 00000000..2f7c5a18
--- /dev/null
+++ b/SafeExamBrowser.Service.UnitTests/packages.config
@@ -0,0 +1,5 @@
+
+
+  
+  
+
\ No newline at end of file
diff --git a/SafeExamBrowser.Service/App.config b/SafeExamBrowser.Service/App.config
new file mode 100644
index 00000000..56efbc7b
--- /dev/null
+++ b/SafeExamBrowser.Service/App.config
@@ -0,0 +1,6 @@
+
+
+     
+        
+    
+
\ No newline at end of file
diff --git a/SafeExamBrowser.Service/CompositionRoot.cs b/SafeExamBrowser.Service/CompositionRoot.cs
new file mode 100644
index 00000000..e8e757c2
--- /dev/null
+++ b/SafeExamBrowser.Service/CompositionRoot.cs
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET)
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+namespace SafeExamBrowser.Service
+{
+	internal class CompositionRoot
+	{
+		internal void BuildObjectGraph()
+		{
+
+		}
+	}
+}
diff --git a/SafeExamBrowser.Service/Installer.cs b/SafeExamBrowser.Service/Installer.cs
new file mode 100644
index 00000000..99efedb9
--- /dev/null
+++ b/SafeExamBrowser.Service/Installer.cs
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET)
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+using System.ComponentModel;
+using System.ServiceProcess;
+
+namespace SafeExamBrowser.Service
+{
+	[RunInstaller(true)]
+	public class Installer : System.Configuration.Install.Installer
+	{
+		private ServiceProcessInstaller process;
+		private ServiceInstaller service;
+
+		public Installer()
+		{
+			process = new ServiceProcessInstaller();
+			process.Account = ServiceAccount.LocalSystem;
+
+			service = new ServiceInstaller();
+			service.Description = "Performs operations which require elevated privileges.";
+			service.DisplayName = "Safe Exam Browser Service";
+			service.ServiceName = nameof(SafeExamBrowser.Service);
+			service.StartType = ServiceStartMode.Automatic;
+
+			Installers.Add(process);
+			Installers.Add(service);
+		}
+	}
+}
diff --git a/SafeExamBrowser.Service/Properties/AssemblyInfo.cs b/SafeExamBrowser.Service/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..22ac2c99
--- /dev/null
+++ b/SafeExamBrowser.Service/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("SafeExamBrowser.Service")]
+[assembly: AssemblyDescription("Safe Exam Browser")]
+[assembly: AssemblyCompany("ETH Zürich")]
+[assembly: AssemblyProduct("SafeExamBrowser.Service")]
+[assembly: AssemblyCopyright("Copyright © 2019 ETH Zürich, Educational Development and Technology (LET)")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("fa3c6692-dfed-4afa-bd58-9a3da2753c78")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: AssemblyInformationalVersion("1.0.0.0")]
diff --git a/SafeExamBrowser.Service/SafeExamBrowser.Service.csproj b/SafeExamBrowser.Service/SafeExamBrowser.Service.csproj
new file mode 100644
index 00000000..15e1baf7
--- /dev/null
+++ b/SafeExamBrowser.Service/SafeExamBrowser.Service.csproj
@@ -0,0 +1,55 @@
+
+
+  
+  
+    Debug
+    AnyCPU
+    {FA3C6692-DFED-4AFA-BD58-9A3DA2753C78}
+    WinExe
+    SafeExamBrowser.Service
+    SafeExamBrowser.Service
+    v4.7.2
+    512
+    true
+    true
+  
+  
+    AnyCPU
+    true
+    full
+    false
+    bin\Debug\
+    DEBUG;TRACE
+    prompt
+    4
+  
+  
+    AnyCPU
+    pdbonly
+    true
+    bin\Release\
+    TRACE
+    prompt
+    4
+  
+  
+    
+    
+    
+    
+  
+  
+    
+    
+      Component
+    
+    
+      Component
+    
+    
+  
+  
+    
+  
+  
+
\ No newline at end of file
diff --git a/SafeExamBrowser.Service/Service.cs b/SafeExamBrowser.Service/Service.cs
new file mode 100644
index 00000000..2f69194b
--- /dev/null
+++ b/SafeExamBrowser.Service/Service.cs
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET)
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+using System.ServiceProcess;
+
+namespace SafeExamBrowser.Service
+{
+	public class Service : ServiceBase
+	{
+		private CompositionRoot instances;
+
+		public Service()
+		{
+			CanPauseAndContinue = false;
+			ServiceName = nameof(SafeExamBrowser.Service);
+		}
+
+		public static void Main()
+		{
+			Run(new Service());
+		}
+
+		protected override void OnStart(string[] args)
+		{
+			//instances = new CompositionRoot();
+			//instances.BuildObjectGraph();
+			//instances.LogStartupInformation();
+
+			//var success = instances.ServiceController.TryStart();
+
+			//if (!success)
+			//{
+			//	Environment.Exit(-1);
+			//}
+		}
+
+		protected override void OnStop()
+		{
+			//instances?.ServiceController?.Terminate();
+			//instances?.LogShutdownInformation();
+		}
+	}
+}
diff --git a/SafeExamBrowser.sln b/SafeExamBrowser.sln
index 63f70632..73b48daf 100644
--- a/SafeExamBrowser.sln
+++ b/SafeExamBrowser.sln
@@ -58,6 +58,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser.UserInterfa
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser.UserInterface.Shared", "SafeExamBrowser.UserInterface.Shared\SafeExamBrowser.UserInterface.Shared.csproj", "{38525928-87BA-4F8C-8010-4EB97BFAAE13}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser.Service", "SafeExamBrowser.Service\SafeExamBrowser.Service.csproj", "{FA3C6692-DFED-4AFA-BD58-9A3DA2753C78}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser.Service.UnitTests", "SafeExamBrowser.Service.UnitTests\SafeExamBrowser.Service.UnitTests.csproj", "{26C4AAEE-3902-400C-A154-63A357DEA2F8}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -242,6 +246,22 @@ Global
 		{38525928-87BA-4F8C-8010-4EB97BFAAE13}.Release|Any CPU.Build.0 = Release|Any CPU
 		{38525928-87BA-4F8C-8010-4EB97BFAAE13}.Release|x86.ActiveCfg = Release|x86
 		{38525928-87BA-4F8C-8010-4EB97BFAAE13}.Release|x86.Build.0 = Release|x86
+		{FA3C6692-DFED-4AFA-BD58-9A3DA2753C78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{FA3C6692-DFED-4AFA-BD58-9A3DA2753C78}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{FA3C6692-DFED-4AFA-BD58-9A3DA2753C78}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{FA3C6692-DFED-4AFA-BD58-9A3DA2753C78}.Debug|x86.Build.0 = Debug|Any CPU
+		{FA3C6692-DFED-4AFA-BD58-9A3DA2753C78}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{FA3C6692-DFED-4AFA-BD58-9A3DA2753C78}.Release|Any CPU.Build.0 = Release|Any CPU
+		{FA3C6692-DFED-4AFA-BD58-9A3DA2753C78}.Release|x86.ActiveCfg = Release|Any CPU
+		{FA3C6692-DFED-4AFA-BD58-9A3DA2753C78}.Release|x86.Build.0 = Release|Any CPU
+		{26C4AAEE-3902-400C-A154-63A357DEA2F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{26C4AAEE-3902-400C-A154-63A357DEA2F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{26C4AAEE-3902-400C-A154-63A357DEA2F8}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{26C4AAEE-3902-400C-A154-63A357DEA2F8}.Debug|x86.Build.0 = Debug|Any CPU
+		{26C4AAEE-3902-400C-A154-63A357DEA2F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{26C4AAEE-3902-400C-A154-63A357DEA2F8}.Release|Any CPU.Build.0 = Release|Any CPU
+		{26C4AAEE-3902-400C-A154-63A357DEA2F8}.Release|x86.ActiveCfg = Release|Any CPU
+		{26C4AAEE-3902-400C-A154-63A357DEA2F8}.Release|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/appveyor.yml b/appveyor.yml
index 7de1bd0a..b0873eaa 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -26,5 +26,8 @@ after_test:
  - codecov -f "coverage.xml"
 artifacts:
  - path: SafeExamBrowser.Runtime\bin\$(platform)\$(configuration)
-   name: '$(appveyor_build_version)_Base'
+   name: '$(appveyor_build_version)_Base_Application'
+   type: zip
+ - path: SafeExamBrowser.Service\bin\$(platform)\$(configuration)
+   name: '$(appveyor_build_version)_Base_Service'
    type: zip