mirror of
https://github.com/gnh1201/welsonjs.git
synced 2025-10-23 17:20:59 +00:00
Related works for #132
This commit is contained in:
parent
5d9fb71753
commit
c8b3ac5d99
78
WelsonJS.Toolkit/WelsonJS.Service/MessageReceiver.cs
Normal file
78
WelsonJS.Toolkit/WelsonJS.Service/MessageReceiver.cs
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
// MessageReceiver.cs
|
||||||
|
// https://github.com/gnh1201/welsonjs
|
||||||
|
using DeviceId;
|
||||||
|
using Grpc.Core;
|
||||||
|
using Grpc.Net.Client;
|
||||||
|
using System.ServiceProcess;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using WelsonJS.GrpcService;
|
||||||
|
|
||||||
|
namespace WelsonJS.Service
|
||||||
|
{
|
||||||
|
public class MessageReceiver
|
||||||
|
{
|
||||||
|
private GrpcChannel channel;
|
||||||
|
private ServiceMain parent;
|
||||||
|
private string deviceId;
|
||||||
|
|
||||||
|
public MessageReceiver(ServiceBase parent, string workingDirectory)
|
||||||
|
{
|
||||||
|
this.parent = (ServiceMain)parent;
|
||||||
|
|
||||||
|
// Read the device ID on this computer
|
||||||
|
deviceId = new DeviceIdBuilder()
|
||||||
|
.OnWindows(windows => windows.AddWindowsDeviceId())
|
||||||
|
.ToString();
|
||||||
|
|
||||||
|
// Read configuration from settings.ini
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Get the GRPC server URL from settings
|
||||||
|
string grpcServerAddress = this.parent.GetSettingsFileHandler().Read("GRPC_SERVER_ADDRESS");
|
||||||
|
|
||||||
|
// Set the GRPC channel
|
||||||
|
channel = GrpcChannel.ForAddress(grpcServerAddress);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
channel = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Start()
|
||||||
|
{
|
||||||
|
if (channel != null)
|
||||||
|
{
|
||||||
|
Task.Run(() => GetTask());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
parent.Log("Not Initializd GRPC channel");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task GetTask()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var client = new MessageController.MessageControllerClient(channel);
|
||||||
|
|
||||||
|
var request = new MessageRequest {
|
||||||
|
ClientId = deviceId
|
||||||
|
};
|
||||||
|
var call = client.SendMessageStream(request);
|
||||||
|
|
||||||
|
while (await call.ResponseStream.MoveNext())
|
||||||
|
{
|
||||||
|
var response = call.ResponseStream.Current;
|
||||||
|
parent.Log($"Received: {response.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
channel?.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
option csharp_namespace = "WelsonJS.GrpcService";
|
||||||
|
|
||||||
|
service MessageController {
|
||||||
|
rpc SendMessageStream (MessageRequest) returns (stream MessageReply);
|
||||||
|
}
|
||||||
|
|
||||||
|
message MessageRequest {
|
||||||
|
string clientId = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message MessageReply {
|
||||||
|
string message = 1;
|
||||||
|
}
|
|
@ -50,7 +50,7 @@ namespace WelsonJS.Service
|
||||||
private bool disabledFileMonitor = false;
|
private bool disabledFileMonitor = false;
|
||||||
private ScreenMatching screenMatcher;
|
private ScreenMatching screenMatcher;
|
||||||
private FileEventMonitor fileEventMonitor;
|
private FileEventMonitor fileEventMonitor;
|
||||||
private IniFile settingsController;
|
private IniFile settingsFileHandler;
|
||||||
|
|
||||||
[DllImport("user32.dll")]
|
[DllImport("user32.dll")]
|
||||||
private static extern int GetSystemMetrics(int nIndex);
|
private static extern int GetSystemMetrics(int nIndex);
|
||||||
|
@ -111,11 +111,11 @@ namespace WelsonJS.Service
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
settingsController = new IniFile(settingsFilePath);
|
settingsFileHandler = new IniFile(settingsFilePath);
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
settingsController = null;
|
settingsFileHandler = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,19 +137,6 @@ namespace WelsonJS.Service
|
||||||
defaultTimer.Elapsed += OnElapsedTime;
|
defaultTimer.Elapsed += OnElapsedTime;
|
||||||
timers.Add(defaultTimer);
|
timers.Add(defaultTimer);
|
||||||
|
|
||||||
// Trace an event of file creation
|
|
||||||
if (!disabledFileMonitor)
|
|
||||||
{
|
|
||||||
fileEventMonitor = new FileEventMonitor(this, workingDirectory);
|
|
||||||
fileEventMonitor.Start();
|
|
||||||
|
|
||||||
Log("File Event Monitor started.");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Log("Disabled the File Event Monitor (Sysinternals Sysmon based file event monitor)");
|
|
||||||
}
|
|
||||||
|
|
||||||
// check this session is the user interactive mode
|
// check this session is the user interactive mode
|
||||||
if (Environment.UserInteractive) {
|
if (Environment.UserInteractive) {
|
||||||
this.OnUserInteractiveEnvironment();
|
this.OnUserInteractiveEnvironment();
|
||||||
|
@ -164,6 +151,11 @@ namespace WelsonJS.Service
|
||||||
Log(appName + " Service Loaded");
|
Log(appName + " Service Loaded");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IniFile GetSettingsFileHandler()
|
||||||
|
{
|
||||||
|
return settingsFileHandler;
|
||||||
|
}
|
||||||
|
|
||||||
internal void TestStartupAndStop()
|
internal void TestStartupAndStop()
|
||||||
{
|
{
|
||||||
this.OnStart(this.args);
|
this.OnStart(this.args);
|
||||||
|
@ -175,7 +167,7 @@ namespace WelsonJS.Service
|
||||||
{
|
{
|
||||||
base.OnStart(args);
|
base.OnStart(args);
|
||||||
|
|
||||||
// check the script file exists
|
// Check exists the entry script file
|
||||||
if (File.Exists(scriptFilePath))
|
if (File.Exists(scriptFilePath))
|
||||||
{
|
{
|
||||||
Log($"Script file found: {scriptFilePath}");
|
Log($"Script file found: {scriptFilePath}");
|
||||||
|
@ -205,7 +197,25 @@ namespace WelsonJS.Service
|
||||||
Log($"Script file not found: {scriptFilePath}");
|
Log($"Script file not found: {scriptFilePath}");
|
||||||
}
|
}
|
||||||
|
|
||||||
timers.ForEach(timer => timer?.Start()); // start
|
// Trace a Sysmon file events (If Sysinternals Sysmon installed)
|
||||||
|
if (!disabledFileMonitor)
|
||||||
|
{
|
||||||
|
fileEventMonitor = new FileEventMonitor(this, workingDirectory);
|
||||||
|
fileEventMonitor.Start();
|
||||||
|
|
||||||
|
Log("Trace a Sysmon file events (If Sysinternals Sysmon installed) started.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log("Trace a Sysmon file events (If Sysinternals Sysmon installed) is disabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start GRPC based message receiver
|
||||||
|
MessageReceiver receiver = new MessageReceiver(this, workingDirectory);
|
||||||
|
receiver.Start();
|
||||||
|
|
||||||
|
// Start all the registered timers
|
||||||
|
timers.ForEach(timer => timer?.Start());
|
||||||
|
|
||||||
Log(appName + " Service Started");
|
Log(appName + " Service Started");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="..\packages\Grpc.Tools.2.65.0\build\Grpc.Tools.props" Condition="Exists('..\packages\Grpc.Tools.2.65.0\build\Grpc.Tools.props')" />
|
||||||
<Import Project="..\packages\Microsoft.O365.Security.Native.libyara.NET.4.5.1\build\net462\Microsoft.O365.Security.Native.libyara.NET.props" Condition="Exists('..\packages\Microsoft.O365.Security.Native.libyara.NET.4.5.1\build\net462\Microsoft.O365.Security.Native.libyara.NET.props')" />
|
<Import Project="..\packages\Microsoft.O365.Security.Native.libyara.NET.4.5.1\build\net462\Microsoft.O365.Security.Native.libyara.NET.props" Condition="Exists('..\packages\Microsoft.O365.Security.Native.libyara.NET.4.5.1\build\net462\Microsoft.O365.Security.Native.libyara.NET.props')" />
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
@ -82,10 +83,37 @@
|
||||||
<StartupObject />
|
<StartupObject />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Reference Include="DeviceId, Version=6.7.0.0, Culture=neutral, PublicKeyToken=f755c371b5c59c52, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DeviceId.6.7.0\lib\net40\DeviceId.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DeviceId.Windows, Version=6.6.0.0, Culture=neutral, PublicKeyToken=f755c371b5c59c52, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DeviceId.Windows.6.6.0\lib\net40\DeviceId.Windows.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Google.Protobuf, Version=3.27.3.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Google.Protobuf.3.27.3\lib\net45\Google.Protobuf.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Grpc.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=d754f35622e28bad, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Grpc.Core.2.46.6\lib\net45\Grpc.Core.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Grpc.Core.Api, Version=2.0.0.0, Culture=neutral, PublicKeyToken=d754f35622e28bad, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Grpc.Core.Api.2.65.0\lib\net462\Grpc.Core.Api.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Grpc.Net.Client, Version=2.0.0.0, Culture=neutral, PublicKeyToken=d754f35622e28bad, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Grpc.Net.Client.2.65.0\lib\net462\Grpc.Net.Client.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Grpc.Net.Common, Version=2.0.0.0, Culture=neutral, PublicKeyToken=d754f35622e28bad, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Grpc.Net.Common.2.65.0\lib\netstandard2.0\Grpc.Net.Common.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
|
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.1, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.8.0.1\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.1, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Microsoft.Extensions.Logging.Abstractions.8.0.1\lib\net462\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="RestSharp, Version=111.4.1.0, Culture=neutral, PublicKeyToken=598062e77f915f75, processorArchitecture=MSIL">
|
<Reference Include="RestSharp, Version=111.4.1.0, Culture=neutral, PublicKeyToken=598062e77f915f75, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\RestSharp.111.4.1\lib\net48\RestSharp.dll</HintPath>
|
<HintPath>..\packages\RestSharp.111.4.1\lib\net48\RestSharp.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
@ -95,12 +123,18 @@
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Configuration.Install" />
|
<Reference Include="System.Configuration.Install" />
|
||||||
<Reference Include="System.Data" />
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Diagnostics.DiagnosticSource, Version=8.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.8.0.1\lib\net462\System.Diagnostics.DiagnosticSource.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System.Drawing" />
|
<Reference Include="System.Drawing" />
|
||||||
<Reference Include="System.Management" />
|
<Reference Include="System.Management" />
|
||||||
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
|
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Net.Http" />
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Net.Http.WinHttpHandler, Version=8.0.0.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Net.Http.WinHttpHandler.8.0.2\lib\net462\System.Net.Http.WinHttpHandler.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System.Numerics" />
|
<Reference Include="System.Numerics" />
|
||||||
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
|
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
|
||||||
|
@ -127,6 +161,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="FileEventMonitor.cs" />
|
<Compile Include="FileEventMonitor.cs" />
|
||||||
|
<Compile Include="MessageReceiver.cs" />
|
||||||
<Compile Include="Model\FileRuleMatched.cs" />
|
<Compile Include="Model\FileRuleMatched.cs" />
|
||||||
<Compile Include="ServiceMain.cs">
|
<Compile Include="ServiceMain.cs">
|
||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
|
@ -172,11 +207,21 @@
|
||||||
<Name>WelsonJS.Toolkit</Name>
|
<Name>WelsonJS.Toolkit</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Protobuf Include="Protos\WelsonJS.GrpcService.proto" GrpcServices="Client">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</Protobuf>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
|
<ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\packages\Microsoft.O365.Security.Native.libyara.NET.4.5.1\build\net462\Microsoft.O365.Security.Native.libyara.NET.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.O365.Security.Native.libyara.NET.4.5.1\build\net462\Microsoft.O365.Security.Native.libyara.NET.props'))" />
|
<Error Condition="!Exists('..\packages\Microsoft.O365.Security.Native.libyara.NET.4.5.1\build\net462\Microsoft.O365.Security.Native.libyara.NET.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.O365.Security.Native.libyara.NET.4.5.1\build\net462\Microsoft.O365.Security.Native.libyara.NET.props'))" />
|
||||||
|
<Error Condition="!Exists('..\packages\Grpc.Tools.2.65.0\build\Grpc.Tools.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Grpc.Tools.2.65.0\build\Grpc.Tools.props'))" />
|
||||||
|
<Error Condition="!Exists('..\packages\Grpc.Tools.2.65.0\build\Grpc.Tools.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Grpc.Tools.2.65.0\build\Grpc.Tools.targets'))" />
|
||||||
|
<Error Condition="!Exists('..\packages\Grpc.Core.2.46.6\build\net45\Grpc.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Grpc.Core.2.46.6\build\net45\Grpc.Core.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
|
<Import Project="..\packages\Grpc.Tools.2.65.0\build\Grpc.Tools.targets" Condition="Exists('..\packages\Grpc.Tools.2.65.0\build\Grpc.Tools.targets')" />
|
||||||
|
<Import Project="..\packages\Grpc.Core.2.46.6\build\net45\Grpc.Core.targets" Condition="Exists('..\packages\Grpc.Core.2.46.6\build\net45\Grpc.Core.targets')" />
|
||||||
</Project>
|
</Project>
|
|
@ -7,6 +7,38 @@
|
||||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-8.0.0.1" newVersion="8.0.0.1" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-8.0.0.1" newVersion="8.0.0.1" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Net.Http.WinHttpHandler" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-8.0.0.2" newVersion="8.0.0.2" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="DeviceId" publicKeyToken="f755c371b5c59c52" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-6.7.0.0" newVersion="6.7.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
</runtime>
|
</runtime>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
|
@ -1,10 +1,23 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
|
<package id="DeviceId" version="6.7.0" targetFramework="net48" />
|
||||||
|
<package id="DeviceId.Windows" version="6.6.0" targetFramework="net48" />
|
||||||
|
<package id="Google.Protobuf" version="3.27.3" targetFramework="net48" />
|
||||||
|
<package id="Grpc" version="2.46.6" targetFramework="net48" />
|
||||||
|
<package id="Grpc.Core" version="2.46.6" targetFramework="net48" />
|
||||||
|
<package id="Grpc.Core.Api" version="2.65.0" targetFramework="net48" />
|
||||||
|
<package id="Grpc.Net.Client" version="2.65.0" targetFramework="net48" />
|
||||||
|
<package id="Grpc.Net.Common" version="2.65.0" targetFramework="net48" />
|
||||||
|
<package id="Grpc.Tools" version="2.65.0" targetFramework="net48" developmentDependency="true" />
|
||||||
<package id="Microsoft.Bcl.AsyncInterfaces" version="8.0.0" targetFramework="net48" />
|
<package id="Microsoft.Bcl.AsyncInterfaces" version="8.0.0" targetFramework="net48" />
|
||||||
|
<package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="8.0.1" targetFramework="net48" />
|
||||||
|
<package id="Microsoft.Extensions.Logging.Abstractions" version="8.0.1" targetFramework="net48" />
|
||||||
<package id="Microsoft.O365.Security.Native.libyara.NET" version="4.5.1" targetFramework="net48" />
|
<package id="Microsoft.O365.Security.Native.libyara.NET" version="4.5.1" targetFramework="net48" />
|
||||||
<package id="RestSharp" version="111.4.1" targetFramework="net48" />
|
<package id="RestSharp" version="111.4.1" targetFramework="net48" />
|
||||||
<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
|
<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
|
||||||
|
<package id="System.Diagnostics.DiagnosticSource" version="8.0.1" targetFramework="net48" />
|
||||||
<package id="System.Memory" version="4.5.5" targetFramework="net48" />
|
<package id="System.Memory" version="4.5.5" targetFramework="net48" />
|
||||||
|
<package id="System.Net.Http.WinHttpHandler" version="8.0.2" targetFramework="net48" />
|
||||||
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
|
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
|
||||||
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net48" />
|
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net48" />
|
||||||
<package id="System.Text.Encodings.Web" version="8.0.0" targetFramework="net48" />
|
<package id="System.Text.Encodings.Web" version="8.0.0" targetFramework="net48" />
|
||||||
|
|
|
@ -4,7 +4,9 @@ using System.Reflection;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
// https://github.com/niklyadov/tiny-ini-file-class
|
// TinyINIController
|
||||||
|
// Original source code: https://github.com/niklyadov/tiny-ini-file-class
|
||||||
|
|
||||||
namespace WelsonJS.TinyINIController
|
namespace WelsonJS.TinyINIController
|
||||||
{
|
{
|
||||||
public class IniFile
|
public class IniFile
|
||||||
|
@ -17,14 +19,15 @@ namespace WelsonJS.TinyINIController
|
||||||
|
|
||||||
private readonly FileInfo FileInfo;
|
private readonly FileInfo FileInfo;
|
||||||
|
|
||||||
private readonly string exe = Assembly.GetExecutingAssembly().GetName().Name;
|
//private readonly string exe = Assembly.GetExecutingAssembly().GetName().Name;
|
||||||
|
private readonly string defaultSection = "Default";
|
||||||
|
|
||||||
private readonly FileAccess fileAccess;
|
private readonly FileAccess fileAccess;
|
||||||
|
|
||||||
public IniFile(string path = null, FileAccess access = FileAccess.ReadWrite)
|
public IniFile(string path = null, FileAccess access = FileAccess.ReadWrite)
|
||||||
{
|
{
|
||||||
fileAccess = access;
|
fileAccess = access;
|
||||||
FileInfo = new FileInfo(path ?? exe);
|
FileInfo = new FileInfo(path ?? defaultSection);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Read(string key, string section = null)
|
public string Read(string key, string section = null)
|
||||||
|
@ -33,7 +36,7 @@ namespace WelsonJS.TinyINIController
|
||||||
|
|
||||||
if (fileAccess != FileAccess.Write)
|
if (fileAccess != FileAccess.Write)
|
||||||
{
|
{
|
||||||
GetPrivateProfileString(section ?? exe, key, "", RetVal, 65025, FileInfo.FullName);
|
GetPrivateProfileString(section ?? defaultSection, key, "", RetVal, 65025, FileInfo.FullName);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -46,7 +49,7 @@ namespace WelsonJS.TinyINIController
|
||||||
{
|
{
|
||||||
if (fileAccess != FileAccess.Read)
|
if (fileAccess != FileAccess.Read)
|
||||||
{
|
{
|
||||||
WritePrivateProfileString(section ?? exe, key, value, FileInfo.FullName);
|
WritePrivateProfileString(section ?? defaultSection, key, value, FileInfo.FullName);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -56,12 +59,12 @@ namespace WelsonJS.TinyINIController
|
||||||
|
|
||||||
public void DeleteKey(string key, string section = null)
|
public void DeleteKey(string key, string section = null)
|
||||||
{
|
{
|
||||||
Write(key, null, section ?? exe);
|
Write(key, null, section ?? defaultSection);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeleteSection(string section = null)
|
public void DeleteSection(string section = null)
|
||||||
{
|
{
|
||||||
Write(null, null, section ?? exe);
|
Write(null, null, section ?? defaultSection);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool KeyExists(string key, string section = null)
|
public bool KeyExists(string key, string section = null)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user