From d85858b0c159d4e593ad75b63e7e9cbe769713f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Holger=20B=C3=B6rchers?= Date: Thu, 2 Aug 2018 10:23:45 +0200 Subject: [PATCH] TemporaryDirectory will deleted at the end of process, Path of NSIS is besite of base directory. --- Creator/Helper/TemporaryDirectory.cs | 28 +++++++++++ Creator/Helper/Utils.cs | 4 +- Creator/KattekerCreator.csproj | 1 + Creator/Program.cs | 71 +++++++++++++++------------- Katteker.Test/Katteker.Test.csproj | 12 ----- Katteker/Properties/AssemblyInfo.cs | 4 +- 6 files changed, 70 insertions(+), 50 deletions(-) create mode 100644 Creator/Helper/TemporaryDirectory.cs diff --git a/Creator/Helper/TemporaryDirectory.cs b/Creator/Helper/TemporaryDirectory.cs new file mode 100644 index 0000000..cd1e553 --- /dev/null +++ b/Creator/Helper/TemporaryDirectory.cs @@ -0,0 +1,28 @@ +using System; +using System.Threading; + +namespace KattekerCreator.Helper +{ + public class TemporaryDirectory : IDisposable + { + public string Path { get; } + + public TemporaryDirectory(string path) + { + Path = path; + } + + void IDisposable.Dispose() + { + try + { + Thread.Sleep(100); + System.IO.Directory.Delete(Path, true); + } + catch + { + //ignore. + } + } + } +} \ No newline at end of file diff --git a/Creator/Helper/Utils.cs b/Creator/Helper/Utils.cs index b2f5b40..6c59ce6 100644 --- a/Creator/Helper/Utils.cs +++ b/Creator/Helper/Utils.cs @@ -19,7 +19,7 @@ namespace KattekerCreator.Helper return false; } - public static string CreateTempDirectory() + public static TemporaryDirectory CreateTempDirectory() { string result; do @@ -29,7 +29,7 @@ namespace KattekerCreator.Helper } while (Directory.Exists(result)); Directory.CreateDirectory(result); - return result; + return new TemporaryDirectory(result); } public static bool IsFilesizeWrong(string filename) diff --git a/Creator/KattekerCreator.csproj b/Creator/KattekerCreator.csproj index 2f26f63..8fc81f6 100644 --- a/Creator/KattekerCreator.csproj +++ b/Creator/KattekerCreator.csproj @@ -52,6 +52,7 @@ + diff --git a/Creator/Program.cs b/Creator/Program.cs index eed1285..060575d 100644 --- a/Creator/Program.cs +++ b/Creator/Program.cs @@ -10,11 +10,12 @@ namespace KattekerCreator { public class Program { - private const string Executable = @"C:\Program Files (x86)\NSIS\makensis.exe"; + //private const string MakeNsis = @"C:\Program Files (x86)\NSIS\makensis.exe"; private readonly string _baseDirectory = AppDomain.CurrentDomain.BaseDirectory; + private string MakeNsis => Path.Combine(_baseDirectory, "NSIS", "makensis.exe"); private ApplicationArguments _appArguments; private AssemblyFileInfo _assemblyFileInfo; - private string _tempDir; + private TemporaryDirectory _tempDir; private Releases _releases; private static int Main(string[] args) @@ -50,31 +51,33 @@ namespace KattekerCreator _appArguments = parser.GetObject(); //Create tempdir - _tempDir = Utils.CreateTempDirectory(); - _releases = new Releases(_appArguments.OutputDir); - parser.ShowProgramArguments(); - //Modify AppStub - var appStubFile = ModifyAppStub(); - //Acquire infos from Executable. - _assemblyFileInfo = new AssemblyFileInfo(_appArguments, _tempDir); - var configFile = CreateConfigFile(); - - //Generate NSIS-Script - var additionalFiles = new[] + using (_tempDir = Utils.CreateTempDirectory()) { - new PhysicalFile(appStubFile, Path.GetFileName(_appArguments.ProgramFile)), - new PhysicalFile(configFile, Path.Combine($"app-{_assemblyFileInfo.AssemblyVersion}", Path.GetFileName(configFile) ?? string.Empty)) - }; - var templateFile = GenerateNsisTemplate(additionalFiles); - //Start makensis.exe - var setupFilePath = CompileSetupScript(templateFile); - //Copy to Output-Folder - CopyToOutputFolder(setupFilePath); - //Create/Modify RELEASE File - var releaseEntry = AddPackageToReleaseFile(setupFilePath); - //Copy installer as setup.exe - CopyAsSetup(setupFilePath, releaseEntry); - return 0; + _releases = new Releases(_appArguments.OutputDir); + parser.ShowProgramArguments(); + //Modify AppStub + var appStubFile = ModifyAppStub(); + //Acquire infos from Executable. + _assemblyFileInfo = new AssemblyFileInfo(_appArguments, _tempDir.Path); + var configFile = CreateConfigFile(); + + //Generate NSIS-Script + var additionalFiles = new[] + { + new PhysicalFile(appStubFile, Path.GetFileName(_appArguments.ProgramFile)), + new PhysicalFile(configFile, Path.Combine($"app-{_assemblyFileInfo.AssemblyVersion}", Path.GetFileName(configFile) ?? string.Empty)) + }; + var templateFile = GenerateNsisTemplate(additionalFiles); + //Start makensis.exe + var setupFilePath = CompileSetupScript(templateFile); + //Copy to Output-Folder + CopyToOutputFolder(setupFilePath); + //Create/Modify RELEASE File + var releaseEntry = AddPackageToReleaseFile(setupFilePath); + //Copy installer as setup.exe + CopyAsSetup(setupFilePath, releaseEntry); + return 0; + } } private void CopyAsSetup(string setupFilePath, ReleaseEntry releaseEntry) @@ -117,15 +120,15 @@ namespace KattekerCreator File.Copy(setupFilePath, Path.Combine(_appArguments.OutputDir, setupFile), true); } - private static string CompileSetupScript(string templateFile) + private string CompileSetupScript(string templateFile) { - if (!File.Exists(Executable)) throw new FileNotFoundException("NSIS not installed properly."); + if (!File.Exists(MakeNsis)) throw new FileNotFoundException("NSIS not installed properly."); int exitcode; using (var p = new Process()) { p.StartInfo = new ProcessStartInfo { - FileName = Executable, + FileName = MakeNsis, Arguments = $"\"{templateFile}\"", UseShellExecute = false }; @@ -133,16 +136,16 @@ namespace KattekerCreator p.Start(); p.WaitForExit(); exitcode = p.ExitCode; - Log.WriteInfoLine($"{Path.GetFileName(Executable)} has exited with Exitcode: {exitcode} (Took: {sw.ElapsedMilliseconds}ms)"); + Log.WriteInfoLine($"{Path.GetFileName(MakeNsis)} has exited with Exitcode: {exitcode} (Took: {sw.ElapsedMilliseconds}ms)"); } - if (exitcode != 0) throw new Exception($"{Path.GetFileName(Executable)} has exited with Exitcode: {exitcode}"); + if (exitcode != 0) throw new Exception($"{Path.GetFileName(MakeNsis)} has exited with Exitcode: {exitcode}"); return Path.ChangeExtension(templateFile, "exe"); } private string CreateConfigFile() { - var pathToFile = Path.Combine(_tempDir, Constants.KattekerConfig); + var pathToFile = Path.Combine(_tempDir.Path, Constants.KattekerConfig); var kattekerConfig = new KattekerConfig { Publish = _appArguments.PublishDir ?? _appArguments.OutputDir, @@ -155,7 +158,7 @@ namespace KattekerCreator private string ModifyAppStub() { var baseFile = new FileInfo(Path.Combine(_baseDirectory, Constants.ExecutionStub)); - var targetFile = baseFile.CopyTo(Path.Combine(_tempDir, Constants.ExecutionStub)); + var targetFile = baseFile.CopyTo(Path.Combine(_tempDir.Path, Constants.ExecutionStub)); Utils.CopyResources(_appArguments.ProgramFile, targetFile.FullName); return targetFile.FullName; } @@ -166,7 +169,7 @@ namespace KattekerCreator { try { - var outFile = Path.Combine(_tempDir, GenerateFilename(_assemblyFileInfo.ProductName, _assemblyFileInfo.AssemblyVersion.ToString(), "nsi")); + var outFile = Path.Combine(_tempDir.Path, GenerateFilename(_assemblyFileInfo.ProductName, _assemblyFileInfo.AssemblyVersion.ToString(), "nsi")); var setupTmpl = new SetupTmpl { Executable = _assemblyFileInfo.FileInfo.Name, diff --git a/Katteker.Test/Katteker.Test.csproj b/Katteker.Test/Katteker.Test.csproj index 5d872d4..35f932b 100644 --- a/Katteker.Test/Katteker.Test.csproj +++ b/Katteker.Test/Katteker.Test.csproj @@ -60,33 +60,21 @@ PreserveNewest - - PreserveNewest - PreserveNewest PreserveNewest - - PreserveNewest - PreserveNewest - - PreserveNewest - PreserveNewest PreserveNewest - - PreserveNewest - PreserveNewest diff --git a/Katteker/Properties/AssemblyInfo.cs b/Katteker/Properties/AssemblyInfo.cs index 6ccc645..6272e7e 100644 --- a/Katteker/Properties/AssemblyInfo.cs +++ b/Katteker/Properties/AssemblyInfo.cs @@ -32,6 +32,6 @@ using System.Runtime.InteropServices; // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, // indem Sie "*" wie unten gezeigt eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.4")] -[assembly: AssemblyFileVersion("1.0.4")] +[assembly: AssemblyVersion("1.1.0")] +[assembly: AssemblyFileVersion("1.1.0")] [assembly: InternalsVisibleTo("Katteker.Test")] \ No newline at end of file