diff --git a/BackupEssentials/BackupEssentials.csproj b/BackupEssentials/BackupEssentials.csproj
index 2dcf1d8..975fbac 100644
--- a/BackupEssentials/BackupEssentials.csproj
+++ b/BackupEssentials/BackupEssentials.csproj
@@ -140,6 +140,7 @@
       <DependentUpon>TestingWindow.xaml</DependentUpon>
     </Compile>
     <Compile Include="Sys\UI\DateFormat.cs" />
+    <Compile Include="Utils\FileLock.cs" />
     <Compile Include="Utils\FileUtils.cs" />
     <Compile Include="Utils\KeyEqualityComparer.cs" />
     <Compile Include="Utils\NativeMethods.cs" />
diff --git a/BackupEssentials/Utils/FileLock.cs b/BackupEssentials/Utils/FileLock.cs
new file mode 100644
index 0000000..cede5d0
--- /dev/null
+++ b/BackupEssentials/Utils/FileLock.cs
@@ -0,0 +1,35 @@
+using System.Diagnostics;
+using System.IO;
+
+namespace BackupEssentials.Utils{
+    class FileLock{
+        private static readonly int processID = Process.GetCurrentProcess().Id;
+
+        private readonly string FileName;
+        private bool IsLocked;
+
+        public FileLock(string lockFileName){
+            this.FileName = lockFileName;
+        }
+
+        public bool TryLock(){
+            if (FileUtils.WriteFile(FileName,FileMode.CreateNew,(writer) => { writer.Write(processID); })){
+                IsLocked = false;
+                FileUtils.ReadFile(FileName,FileMode.Open,(line) => { IsLocked = line.Equals(processID.ToString()); });
+                return IsLocked;
+            }
+            else return false;
+        }
+
+        public bool ReleaseLock(){
+            if (IsLocked){
+                try{
+                    File.Delete(FileName);
+                    return true;
+                }catch(IOException){}
+            }
+
+            return false;
+        }
+    }
+}