From 07151d1b531ba9c350a08e7e253750da426bdc8c Mon Sep 17 00:00:00 2001 From: Daniel Hultgren Date: Sun, 27 Dec 2015 11:43:17 +0100 Subject: [PATCH] Resources are now embedded into the exe! --- .gitignore | 1 - WorkClocker/App.xaml.cs | 25 +++-- WorkClocker/Helpers/EmbeddedAssembly.cs | 95 ++++++++++++++++++ .../MouseKeyboardActivityMonitor.dll | Bin 0 -> 45056 bytes WorkClocker/WorkClocker.csproj | 12 ++- 5 files changed, 121 insertions(+), 12 deletions(-) create mode 100644 WorkClocker/Helpers/EmbeddedAssembly.cs create mode 100644 WorkClocker/References/MouseKeyboardActivityMonitor.dll diff --git a/.gitignore b/.gitignore index 2d79d44..d0f3ae9 100644 --- a/.gitignore +++ b/.gitignore @@ -17,7 +17,6 @@ Debug/ Release/ !**/bin/x64/Release/ !**/bin/x86/Release/ -References/ build/ bld/ [Oo]bj/ diff --git a/WorkClocker/App.xaml.cs b/WorkClocker/App.xaml.cs index 4e3fa2a..0fef547 100644 --- a/WorkClocker/App.xaml.cs +++ b/WorkClocker/App.xaml.cs @@ -1,18 +1,31 @@ using System; -using System.Collections.Generic; -using System.Configuration; -using System.Data; -using System.Linq; -using System.Threading.Tasks; using System.Windows; +using WorkClocker.Helpers; namespace WorkClocker { /// /// Interaction logic for App.xaml /// - public partial class App : Application + public partial class App { + private static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) + { + return EmbeddedAssembly.Get(args.Name); + } + + [STAThread] + public static void Main() + { + const string res = "WorkClocker.References.MouseKeyboardActivityMonitor.dll"; + EmbeddedAssembly.Load(res, "MouseKeyboardActivityMonitor.dll"); + AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; + + var application = new App(); + application.InitializeComponent(); + application.Run(); + } + private void Application_Exit(object sender, ExitEventArgs e) { WorkClocker.Properties.Settings.Default.Save(); diff --git a/WorkClocker/Helpers/EmbeddedAssembly.cs b/WorkClocker/Helpers/EmbeddedAssembly.cs new file mode 100644 index 0000000..a6d7766 --- /dev/null +++ b/WorkClocker/Helpers/EmbeddedAssembly.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Security.Cryptography; + +namespace WorkClocker.Helpers +{ + /// + /// http://www.codeproject.com/Articles/528178/Load-DLL-From-Embedded-Resource + /// + public class EmbeddedAssembly + { + // Version 1.3 + + private static Dictionary _dic; + + public static void Load(string embeddedResource, string fileName) + { + if (_dic == null) + _dic = new Dictionary(); + + byte[] ba; + Assembly asm; + var curAsm = Assembly.GetExecutingAssembly(); + + using (var stm = curAsm.GetManifestResourceStream(embeddedResource)) + { + // Either the file is not existed or it is not mark as embedded resource + if (stm == null) + throw new Exception(embeddedResource + " is not found in Embedded Resources."); + + // Get byte[] from the file from embedded resource + ba = new byte[(int)stm.Length]; + stm.Read(ba, 0, (int)stm.Length); + try + { + asm = Assembly.Load(ba); + + // Add the assembly/dll into dictionary + _dic.Add(asm.FullName, asm); + return; + } + catch + { + // Purposely do nothing + // Unmanaged dll or assembly cannot be loaded directly from byte[] + // Let the process fall through for next part + } + } + + bool fileOk; + string tempFile; + + using (var sha1 = new SHA1CryptoServiceProvider()) + { + var fileHash = BitConverter.ToString(sha1.ComputeHash(ba)).Replace("-", string.Empty); + + tempFile = Path.GetTempPath() + fileName; + + if (File.Exists(tempFile)) + { + var bb = File.ReadAllBytes(tempFile); + var fileHash2 = BitConverter.ToString(sha1.ComputeHash(bb)).Replace("-", string.Empty); + + fileOk = fileHash == fileHash2; + } + else + { + fileOk = false; + } + } + + if (!fileOk) + { + File.WriteAllBytes(tempFile, ba); + } + + asm = Assembly.LoadFile(tempFile); + + _dic.Add(asm.FullName, asm); + } + + public static Assembly Get(string assemblyFullName) + { + if (_dic == null || _dic.Count == 0) + return null; + + if (_dic.ContainsKey(assemblyFullName)) + return _dic[assemblyFullName]; + + return null; + } + } +} \ No newline at end of file diff --git a/WorkClocker/References/MouseKeyboardActivityMonitor.dll b/WorkClocker/References/MouseKeyboardActivityMonitor.dll new file mode 100644 index 0000000000000000000000000000000000000000..88441f487a240a6f6bbff3f97defe9e02ae642bf GIT binary patch literal 45056 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 literal 0 HcmV?d00001 diff --git a/WorkClocker/WorkClocker.csproj b/WorkClocker/WorkClocker.csproj index 358114b..ebaa99b 100644 --- a/WorkClocker/WorkClocker.csproj +++ b/WorkClocker/WorkClocker.csproj @@ -38,7 +38,7 @@ 4 - + WorkClocker.App true @@ -85,6 +85,7 @@ False References\MouseKeyboardActivityMonitor.dll + False @@ -103,10 +104,11 @@ - + MSBuild:Compile Designer - + + @@ -167,15 +169,15 @@ + - + -