diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e6e5c51
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,10 @@
+################################################################################
+# This .gitignore file was automatically created by Microsoft(R) Visual Studio.
+################################################################################
+
+/Net Service Installation/MyDemoService/bin/Release
+/Net Service Installation/MyDemoService/obj
+/Net Service Installation/Net Service Demo-cache
+/Net Service Installation/Net Service Demo-SetupFiles
+/.vs
+/Net Service Installation/.vs/MyDemoService
diff --git a/Net Service Installation/MyDemoService.sln b/Net Service Installation/MyDemoService.sln
new file mode 100644
index 0000000..4f4f8bc
--- /dev/null
+++ b/Net Service Installation/MyDemoService.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.14.37203.1 d17.14
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyDemoService", "MyDemoService\MyDemoService.csproj", "{94B9FD34-984D-41DC-91CC-F00C7FD98979}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {94B9FD34-984D-41DC-91CC-F00C7FD98979}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {94B9FD34-984D-41DC-91CC-F00C7FD98979}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {94B9FD34-984D-41DC-91CC-F00C7FD98979}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {94B9FD34-984D-41DC-91CC-F00C7FD98979}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {B96E714D-F578-44EB-B3C6-C87E915072A0}
+ EndGlobalSection
+EndGlobal
diff --git a/Net Service Installation/MyDemoService/App.config b/Net Service Installation/MyDemoService/App.config
new file mode 100644
index 0000000..193aecc
--- /dev/null
+++ b/Net Service Installation/MyDemoService/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net Service Installation/MyDemoService/MyDemoService.csproj b/Net Service Installation/MyDemoService/MyDemoService.csproj
new file mode 100644
index 0000000..ae893a7
--- /dev/null
+++ b/Net Service Installation/MyDemoService/MyDemoService.csproj
@@ -0,0 +1,60 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {94B9FD34-984D-41DC-91CC-F00C7FD98979}
+ WinExe
+ MyDemoService
+ MyDemoService
+ v4.8
+ 512
+ true
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Component
+
+
+ Service1.cs
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net Service Installation/MyDemoService/Program.cs b/Net Service Installation/MyDemoService/Program.cs
new file mode 100644
index 0000000..1daca45
--- /dev/null
+++ b/Net Service Installation/MyDemoService/Program.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.ServiceProcess;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MyDemoService
+{
+ internal static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ static void Main()
+ {
+ ServiceBase[] ServicesToRun;
+ ServicesToRun = new ServiceBase[]
+ {
+ new Service1()
+ };
+ ServiceBase.Run(ServicesToRun);
+ }
+ }
+}
diff --git a/Net Service Installation/MyDemoService/Properties/AssemblyInfo.cs b/Net Service Installation/MyDemoService/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..e8e4d1f
--- /dev/null
+++ b/Net Service Installation/MyDemoService/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+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("MyDemoService")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("MyDemoService")]
+[assembly: AssemblyCopyright("Copyright © 2026")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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("94b9fd34-984d-41dc-91cc-f00c7fd98979")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Net Service Installation/MyDemoService/Service1.Designer.cs b/Net Service Installation/MyDemoService/Service1.Designer.cs
new file mode 100644
index 0000000..e82e7c7
--- /dev/null
+++ b/Net Service Installation/MyDemoService/Service1.Designer.cs
@@ -0,0 +1,37 @@
+namespace MyDemoService
+{
+ partial class Service1
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Component Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ components = new System.ComponentModel.Container();
+ this.ServiceName = "Service1";
+ }
+
+ #endregion
+ }
+}
diff --git a/Net Service Installation/MyDemoService/Service1.cs b/Net Service Installation/MyDemoService/Service1.cs
new file mode 100644
index 0000000..a4912fe
--- /dev/null
+++ b/Net Service Installation/MyDemoService/Service1.cs
@@ -0,0 +1,75 @@
+using System;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Security.Principal;
+using System.ServiceProcess;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MyDemoService
+{
+ public partial class Service1 : ServiceBase
+ {
+ private static readonly string LogDirectoryPath = Path.Combine(
+ Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData),
+ "Caphyon",
+ "ServiceSample");
+
+ private static readonly string LogFilePath = Path.Combine(LogDirectoryPath, "ServiceHeartbeat.log");
+
+ public Service1()
+ {
+ InitializeComponent();
+ }
+
+ protected override void OnStart(string[] args)
+ {
+ WriteHeartbeat(string.Format("Service started under {0}", GetAccountDescription()));
+ }
+
+ protected override void OnStop()
+ {
+ WriteHeartbeat(string.Format("Service stopped under {0}", GetAccountDescription()));
+ }
+
+ private static void WriteHeartbeat(string message)
+ {
+ Directory.CreateDirectory(LogDirectoryPath);
+
+ File.AppendAllText(
+ LogFilePath,
+ string.Format("{0:yyyy-MM-dd HH:mm:ss} - {1}{2}", DateTime.Now, message, Environment.NewLine));
+ }
+
+ private static string GetAccountDescription()
+ {
+ using (WindowsIdentity identity = WindowsIdentity.GetCurrent())
+ {
+ if (identity.User != null)
+ {
+ if (identity.User.IsWellKnown(WellKnownSidType.LocalSystemSid))
+ {
+ return "Local System account";
+ }
+
+ if (identity.User.IsWellKnown(WellKnownSidType.LocalServiceSid))
+ {
+ return "Local Service account";
+ }
+
+ if (identity.User.IsWellKnown(WellKnownSidType.NetworkServiceSid))
+ {
+ return "Network Service account";
+ }
+ }
+
+ return string.Format("'{0}' account", identity.Name);
+ }
+ }
+ }
+}
diff --git a/Net Service Installation/Net Service Demo.aip b/Net Service Installation/Net Service Demo.aip
new file mode 100644
index 0000000..7dfb165
--- /dev/null
+++ b/Net Service Installation/Net Service Demo.aip
@@ -0,0 +1,307 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+