SEBWIN-316: Added manufacturer, model and name to system info.

This commit is contained in:
dbuechel 2019-12-20 17:06:28 +01:00
parent 175a2e8cf7
commit bf69a64e15
8 changed files with 115 additions and 13 deletions

View file

@ -12,7 +12,7 @@ using SafeExamBrowser.Settings;
namespace SafeExamBrowser.Configuration.ConfigurationData
{
internal partial class DataMapper
internal class DataMapper
{
private BaseDataMapper[] mappers =
{

View file

@ -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();
}
}
}

View file

@ -90,6 +90,7 @@
<Compile Include="Operations\ClientOperationTests.cs" />
<Compile Include="Operations\SessionActivationOperationTests.cs" />
<Compile Include="Operations\SessionInitializationOperationTests.cs" />
<Compile Include="Operations\VirtualMachineOperationTests.cs" />
<Compile Include="RuntimeControllerTests.cs" />
<Compile Include="Communication\RuntimeHostTests.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />

View file

@ -11,30 +11,30 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using SafeExamBrowser.Communication.Contracts;
using SafeExamBrowser.Communication.Hosts;
using SafeExamBrowser.Communication.Proxies;
using SafeExamBrowser.Configuration;
using SafeExamBrowser.Configuration.Contracts;
using SafeExamBrowser.Configuration.Cryptography;
using SafeExamBrowser.Configuration.DataCompression;
using SafeExamBrowser.Configuration.DataFormats;
using SafeExamBrowser.Configuration.DataResources;
using SafeExamBrowser.Communication.Contracts;
using SafeExamBrowser.Configuration.Contracts;
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.Operations;
using SafeExamBrowser.I18n;
using SafeExamBrowser.I18n.Contracts;
using SafeExamBrowser.Logging;
using SafeExamBrowser.Logging.Contracts;
using SafeExamBrowser.Runtime.Communication;
using SafeExamBrowser.Runtime.Contracts;
using SafeExamBrowser.Runtime.Operations;
using SafeExamBrowser.Settings.Logging;
using SafeExamBrowser.SystemComponents;
using SafeExamBrowser.SystemComponents.Contracts;
using SafeExamBrowser.UserInterface.Desktop;
using SafeExamBrowser.WindowsApi;
using SafeExamBrowser.Settings.Logging;
namespace SafeExamBrowser.Runtime
{
@ -83,6 +83,7 @@ namespace SafeExamBrowser.Runtime
sessionOperations.Enqueue(new SessionInitializationOperation(configuration, logger, runtimeHost, 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 ClientTerminationOperation(logger, processFactory, proxyFactory, runtimeHost, sessionContext, THIRTY_SECONDS));
sessionOperations.Enqueue(new KioskModeOperation(desktopFactory, explorerShell, logger, processFactory, sessionContext));
@ -115,6 +116,7 @@ namespace SafeExamBrowser.Runtime
logger.Log(string.Empty);
logger.Log($"# Application started at {appConfig.ApplicationStartTime.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
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(string.Empty);
}

View file

@ -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;
}
}
}

View file

@ -106,6 +106,7 @@
<Compile Include="Operations\SessionInitializationOperation.cs" />
<Compile Include="Communication\RuntimeHost.cs" />
<Compile Include="CompositionRoot.cs" />
<Compile Include="Operations\VirtualMachineOperation.cs" />
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>

View file

@ -9,7 +9,7 @@
namespace SafeExamBrowser.SystemComponents.Contracts
{
/// <summary>
/// Provides access to information about the operating system.
/// Provides access to information about the computer system.
/// </summary>
public interface ISystemInfo
{
@ -18,6 +18,21 @@ namespace SafeExamBrowser.SystemComponents.Contracts
/// </summary>
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>
/// Reveals the version of the currently running operating system.
/// </summary>

View file

@ -6,25 +6,33 @@
* 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 SafeExamBrowser.SystemComponents.Contracts;
using BatteryChargeStatus = System.Windows.Forms.BatteryChargeStatus;
using OperatingSystem = SafeExamBrowser.SystemComponents.Contracts.OperatingSystem;
namespace SafeExamBrowser.SystemComponents
{
public class SystemInfo : ISystemInfo
{
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 string OperatingSystemInfo
{
get { return $"{OperatingSystemName()}, {System.Environment.OSVersion.VersionString} ({Architecture()})"; }
get { return $"{OperatingSystemName()}, {Environment.OSVersion.VersionString} ({Architecture()})"; }
}
public SystemInfo()
{
InitializeBattery();
InitializeMachineInfo();
InitializeOperatingSystem();
}
@ -35,13 +43,25 @@ namespace SafeExamBrowser.SystemComponents
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()
{
// IMPORTANT:
// 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!
var major = System.Environment.OSVersion.Version.Major;
var minor = System.Environment.OSVersion.Version.Minor;
var major = Environment.OSVersion.Version.Major;
var minor = Environment.OSVersion.Version.Minor;
// See https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions for mapping source...
if (major == 6)
@ -84,7 +104,7 @@ namespace SafeExamBrowser.SystemComponents
private string Architecture()
{
return System.Environment.Is64BitOperatingSystem ? "x64" : "x86";
return Environment.Is64BitOperatingSystem ? "x64" : "x86";
}
}
}