SEBWIN-316: Added manufacturer, model and name to system info.
This commit is contained in:
		
							parent
							
								
									175a2e8cf7
								
							
						
					
					
						commit
						bf69a64e15
					
				
					 8 changed files with 115 additions and 13 deletions
				
			
		| 
						 | 
					@ -12,7 +12,7 @@ using SafeExamBrowser.Settings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace SafeExamBrowser.Configuration.ConfigurationData
 | 
					namespace SafeExamBrowser.Configuration.ConfigurationData
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	internal partial class DataMapper
 | 
						internal class DataMapper
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		private BaseDataMapper[] mappers =
 | 
							private BaseDataMapper[] mappers =
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,22 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * 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 Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace SafeExamBrowser.Runtime.UnitTests.Operations
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						[TestClass]
 | 
				
			||||||
 | 
						public class VirtualMachineOperationTests
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							[TestMethod]
 | 
				
			||||||
 | 
							public void TODO()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								Assert.Fail();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -90,6 +90,7 @@
 | 
				
			||||||
    <Compile Include="Operations\ClientOperationTests.cs" />
 | 
					    <Compile Include="Operations\ClientOperationTests.cs" />
 | 
				
			||||||
    <Compile Include="Operations\SessionActivationOperationTests.cs" />
 | 
					    <Compile Include="Operations\SessionActivationOperationTests.cs" />
 | 
				
			||||||
    <Compile Include="Operations\SessionInitializationOperationTests.cs" />
 | 
					    <Compile Include="Operations\SessionInitializationOperationTests.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="Operations\VirtualMachineOperationTests.cs" />
 | 
				
			||||||
    <Compile Include="RuntimeControllerTests.cs" />
 | 
					    <Compile Include="RuntimeControllerTests.cs" />
 | 
				
			||||||
    <Compile Include="Communication\RuntimeHostTests.cs" />
 | 
					    <Compile Include="Communication\RuntimeHostTests.cs" />
 | 
				
			||||||
    <Compile Include="Properties\AssemblyInfo.cs" />
 | 
					    <Compile Include="Properties\AssemblyInfo.cs" />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,30 +11,30 @@ using System.Collections.Generic;
 | 
				
			||||||
using System.Diagnostics;
 | 
					using System.Diagnostics;
 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Reflection;
 | 
					using System.Reflection;
 | 
				
			||||||
 | 
					using SafeExamBrowser.Communication.Contracts;
 | 
				
			||||||
using SafeExamBrowser.Communication.Hosts;
 | 
					using SafeExamBrowser.Communication.Hosts;
 | 
				
			||||||
using SafeExamBrowser.Communication.Proxies;
 | 
					using SafeExamBrowser.Communication.Proxies;
 | 
				
			||||||
using SafeExamBrowser.Configuration;
 | 
					using SafeExamBrowser.Configuration;
 | 
				
			||||||
 | 
					using SafeExamBrowser.Configuration.Contracts;
 | 
				
			||||||
using SafeExamBrowser.Configuration.Cryptography;
 | 
					using SafeExamBrowser.Configuration.Cryptography;
 | 
				
			||||||
using SafeExamBrowser.Configuration.DataCompression;
 | 
					using SafeExamBrowser.Configuration.DataCompression;
 | 
				
			||||||
using SafeExamBrowser.Configuration.DataFormats;
 | 
					using SafeExamBrowser.Configuration.DataFormats;
 | 
				
			||||||
using SafeExamBrowser.Configuration.DataResources;
 | 
					using SafeExamBrowser.Configuration.DataResources;
 | 
				
			||||||
using SafeExamBrowser.Communication.Contracts;
 | 
					 | 
				
			||||||
using SafeExamBrowser.Configuration.Contracts;
 | 
					 | 
				
			||||||
using SafeExamBrowser.Core.Contracts.OperationModel;
 | 
					using SafeExamBrowser.Core.Contracts.OperationModel;
 | 
				
			||||||
using SafeExamBrowser.I18n.Contracts;
 | 
					 | 
				
			||||||
using SafeExamBrowser.Logging.Contracts;
 | 
					 | 
				
			||||||
using SafeExamBrowser.Runtime.Contracts;
 | 
					 | 
				
			||||||
using SafeExamBrowser.SystemComponents.Contracts;
 | 
					 | 
				
			||||||
using SafeExamBrowser.Core.OperationModel;
 | 
					using SafeExamBrowser.Core.OperationModel;
 | 
				
			||||||
using SafeExamBrowser.Core.Operations;
 | 
					using SafeExamBrowser.Core.Operations;
 | 
				
			||||||
using SafeExamBrowser.I18n;
 | 
					using SafeExamBrowser.I18n;
 | 
				
			||||||
 | 
					using SafeExamBrowser.I18n.Contracts;
 | 
				
			||||||
using SafeExamBrowser.Logging;
 | 
					using SafeExamBrowser.Logging;
 | 
				
			||||||
 | 
					using SafeExamBrowser.Logging.Contracts;
 | 
				
			||||||
using SafeExamBrowser.Runtime.Communication;
 | 
					using SafeExamBrowser.Runtime.Communication;
 | 
				
			||||||
 | 
					using SafeExamBrowser.Runtime.Contracts;
 | 
				
			||||||
using SafeExamBrowser.Runtime.Operations;
 | 
					using SafeExamBrowser.Runtime.Operations;
 | 
				
			||||||
 | 
					using SafeExamBrowser.Settings.Logging;
 | 
				
			||||||
using SafeExamBrowser.SystemComponents;
 | 
					using SafeExamBrowser.SystemComponents;
 | 
				
			||||||
 | 
					using SafeExamBrowser.SystemComponents.Contracts;
 | 
				
			||||||
using SafeExamBrowser.UserInterface.Desktop;
 | 
					using SafeExamBrowser.UserInterface.Desktop;
 | 
				
			||||||
using SafeExamBrowser.WindowsApi;
 | 
					using SafeExamBrowser.WindowsApi;
 | 
				
			||||||
using SafeExamBrowser.Settings.Logging;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace SafeExamBrowser.Runtime
 | 
					namespace SafeExamBrowser.Runtime
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -83,6 +83,7 @@ namespace SafeExamBrowser.Runtime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			sessionOperations.Enqueue(new SessionInitializationOperation(configuration, logger, runtimeHost, sessionContext));
 | 
								sessionOperations.Enqueue(new SessionInitializationOperation(configuration, logger, runtimeHost, sessionContext));
 | 
				
			||||||
			sessionOperations.Enqueue(new ConfigurationOperation(args, configuration, new HashAlgorithm(), logger, sessionContext));
 | 
								sessionOperations.Enqueue(new ConfigurationOperation(args, configuration, new HashAlgorithm(), logger, sessionContext));
 | 
				
			||||||
 | 
								sessionOperations.Enqueue(new VirtualMachineOperation(sessionContext));
 | 
				
			||||||
			sessionOperations.Enqueue(new ServiceOperation(logger, runtimeHost, serviceProxy, sessionContext, THIRTY_SECONDS, userInfo));
 | 
								sessionOperations.Enqueue(new ServiceOperation(logger, runtimeHost, serviceProxy, sessionContext, THIRTY_SECONDS, userInfo));
 | 
				
			||||||
			sessionOperations.Enqueue(new ClientTerminationOperation(logger, processFactory, proxyFactory, runtimeHost, sessionContext, THIRTY_SECONDS));
 | 
								sessionOperations.Enqueue(new ClientTerminationOperation(logger, processFactory, proxyFactory, runtimeHost, sessionContext, THIRTY_SECONDS));
 | 
				
			||||||
			sessionOperations.Enqueue(new KioskModeOperation(desktopFactory, explorerShell, logger, processFactory, sessionContext));
 | 
								sessionOperations.Enqueue(new KioskModeOperation(desktopFactory, explorerShell, logger, processFactory, sessionContext));
 | 
				
			||||||
| 
						 | 
					@ -115,6 +116,7 @@ namespace SafeExamBrowser.Runtime
 | 
				
			||||||
			logger.Log(string.Empty);
 | 
								logger.Log(string.Empty);
 | 
				
			||||||
			logger.Log($"# Application started at {appConfig.ApplicationStartTime.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
 | 
								logger.Log($"# Application started at {appConfig.ApplicationStartTime.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
 | 
				
			||||||
			logger.Log($"# Running on {systemInfo.OperatingSystemInfo}");
 | 
								logger.Log($"# Running on {systemInfo.OperatingSystemInfo}");
 | 
				
			||||||
 | 
								logger.Log($"# Computer '{systemInfo.Name}' is a {systemInfo.Model} manufactured by {systemInfo.Manufacturer}");
 | 
				
			||||||
			logger.Log($"# Runtime-ID: {appConfig.RuntimeId}");
 | 
								logger.Log($"# Runtime-ID: {appConfig.RuntimeId}");
 | 
				
			||||||
			logger.Log(string.Empty);
 | 
								logger.Log(string.Empty);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,41 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * 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 SafeExamBrowser.Core.Contracts.OperationModel;
 | 
				
			||||||
 | 
					using SafeExamBrowser.Core.Contracts.OperationModel.Events;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace SafeExamBrowser.Runtime.Operations
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						internal class VirtualMachineOperation : SessionOperation
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							//private IVirtualMachineDetector detector;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public VirtualMachineOperation(/*IVirtualMachineDetector detector, */SessionContext context) : base(context)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								//this.detector = detector;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public override event ActionRequiredEventHandler ActionRequired { add { } remove { } }
 | 
				
			||||||
 | 
							public override event StatusChangedEventHandler StatusChanged { add { } remove { } }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public override OperationResult Perform()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								return OperationResult.Success;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public override OperationResult Repeat()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								return OperationResult.Success;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public override OperationResult Revert()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								return OperationResult.Success;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -106,6 +106,7 @@
 | 
				
			||||||
    <Compile Include="Operations\SessionInitializationOperation.cs" />
 | 
					    <Compile Include="Operations\SessionInitializationOperation.cs" />
 | 
				
			||||||
    <Compile Include="Communication\RuntimeHost.cs" />
 | 
					    <Compile Include="Communication\RuntimeHost.cs" />
 | 
				
			||||||
    <Compile Include="CompositionRoot.cs" />
 | 
					    <Compile Include="CompositionRoot.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="Operations\VirtualMachineOperation.cs" />
 | 
				
			||||||
    <Compile Include="Properties\AssemblyInfo.cs">
 | 
					    <Compile Include="Properties\AssemblyInfo.cs">
 | 
				
			||||||
      <SubType>Code</SubType>
 | 
					      <SubType>Code</SubType>
 | 
				
			||||||
    </Compile>
 | 
					    </Compile>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,7 +9,7 @@
 | 
				
			||||||
namespace SafeExamBrowser.SystemComponents.Contracts
 | 
					namespace SafeExamBrowser.SystemComponents.Contracts
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/// <summary>
 | 
						/// <summary>
 | 
				
			||||||
	/// Provides access to information about the operating system.
 | 
						/// Provides access to information about the computer system.
 | 
				
			||||||
	/// </summary>
 | 
						/// </summary>
 | 
				
			||||||
	public interface ISystemInfo
 | 
						public interface ISystemInfo
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -18,6 +18,21 @@ namespace SafeExamBrowser.SystemComponents.Contracts
 | 
				
			||||||
		/// </summary>
 | 
							/// </summary>
 | 
				
			||||||
		bool HasBattery { get; }
 | 
							bool HasBattery { get; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/// <summary>
 | 
				
			||||||
 | 
							/// The manufacturer name of the computer system.
 | 
				
			||||||
 | 
							/// </summary>
 | 
				
			||||||
 | 
							string Manufacturer { get; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/// <summary>
 | 
				
			||||||
 | 
							/// The model name of the computer system.
 | 
				
			||||||
 | 
							/// </summary>
 | 
				
			||||||
 | 
							string Model { get; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/// <summary>
 | 
				
			||||||
 | 
							/// The machine name of the computer system.
 | 
				
			||||||
 | 
							/// </summary>
 | 
				
			||||||
 | 
							string Name { get; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/// <summary>
 | 
							/// <summary>
 | 
				
			||||||
		/// Reveals the version of the currently running operating system.
 | 
							/// Reveals the version of the currently running operating system.
 | 
				
			||||||
		/// </summary>
 | 
							/// </summary>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,25 +6,33 @@
 | 
				
			||||||
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | 
					 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Management;
 | 
				
			||||||
using System.Windows.Forms;
 | 
					using System.Windows.Forms;
 | 
				
			||||||
using SafeExamBrowser.SystemComponents.Contracts;
 | 
					using SafeExamBrowser.SystemComponents.Contracts;
 | 
				
			||||||
using BatteryChargeStatus = System.Windows.Forms.BatteryChargeStatus;
 | 
					using BatteryChargeStatus = System.Windows.Forms.BatteryChargeStatus;
 | 
				
			||||||
 | 
					using OperatingSystem = SafeExamBrowser.SystemComponents.Contracts.OperatingSystem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace SafeExamBrowser.SystemComponents
 | 
					namespace SafeExamBrowser.SystemComponents
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	public class SystemInfo : ISystemInfo
 | 
						public class SystemInfo : ISystemInfo
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		public bool HasBattery { get; private set; }
 | 
							public bool HasBattery { get; private set; }
 | 
				
			||||||
 | 
							public string Manufacturer { get; private set; }
 | 
				
			||||||
 | 
							public string Model { get; private set; }
 | 
				
			||||||
 | 
							public string Name { get; private set; }
 | 
				
			||||||
		public OperatingSystem OperatingSystem { get; private set; }
 | 
							public OperatingSystem OperatingSystem { get; private set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public string OperatingSystemInfo
 | 
							public string OperatingSystemInfo
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			get { return $"{OperatingSystemName()}, {System.Environment.OSVersion.VersionString} ({Architecture()})"; }
 | 
								get { return $"{OperatingSystemName()}, {Environment.OSVersion.VersionString} ({Architecture()})"; }
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public SystemInfo()
 | 
							public SystemInfo()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			InitializeBattery();
 | 
								InitializeBattery();
 | 
				
			||||||
 | 
								InitializeMachineInfo();
 | 
				
			||||||
			InitializeOperatingSystem();
 | 
								InitializeOperatingSystem();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,13 +43,25 @@ namespace SafeExamBrowser.SystemComponents
 | 
				
			||||||
			HasBattery = !status.HasFlag(BatteryChargeStatus.NoSystemBattery) && !status.HasFlag(BatteryChargeStatus.Unknown);
 | 
								HasBattery = !status.HasFlag(BatteryChargeStatus.NoSystemBattery) && !status.HasFlag(BatteryChargeStatus.Unknown);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private void InitializeMachineInfo()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								using (var searcher = new ManagementObjectSearcher("Select * from Win32_ComputerSystem"))
 | 
				
			||||||
 | 
								using (var results = searcher.Get())
 | 
				
			||||||
 | 
								using (var system = results.Cast<ManagementObject>().FirstOrDefault())
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									Manufacturer = Convert.ToString(system["Manufacturer"]);
 | 
				
			||||||
 | 
									Model = string.Join(" ", Convert.ToString(system["SystemFamily"]), Convert.ToString(system["Model"]));
 | 
				
			||||||
 | 
									Name = Convert.ToString(system["Name"]);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private void InitializeOperatingSystem()
 | 
							private void InitializeOperatingSystem()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			// IMPORTANT:
 | 
								// IMPORTANT:
 | 
				
			||||||
			// In order to be able to retrieve the correct operating system version via System.Environment.OSVersion, the executing
 | 
								// In order to be able to retrieve the correct operating system version via System.Environment.OSVersion, the executing
 | 
				
			||||||
			// assembly needs to define an application manifest where the supported Windows versions are specified!
 | 
								// assembly needs to define an application manifest where the supported Windows versions are specified!
 | 
				
			||||||
			var major = System.Environment.OSVersion.Version.Major;
 | 
								var major = Environment.OSVersion.Version.Major;
 | 
				
			||||||
			var minor = System.Environment.OSVersion.Version.Minor;
 | 
								var minor = Environment.OSVersion.Version.Minor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// See https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions for mapping source...
 | 
								// See https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions for mapping source...
 | 
				
			||||||
			if (major == 6)
 | 
								if (major == 6)
 | 
				
			||||||
| 
						 | 
					@ -84,7 +104,7 @@ namespace SafeExamBrowser.SystemComponents
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private string Architecture()
 | 
							private string Architecture()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			return System.Environment.Is64BitOperatingSystem ? "x64" : "x86";
 | 
								return Environment.Is64BitOperatingSystem ? "x64" : "x86";
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue