TemporaryDirectory will deleted at the end of process, Path of NSIS is besite of base directory.
This commit is contained in:
parent
f8ca13d7e6
commit
d85858b0c1
28
Creator/Helper/TemporaryDirectory.cs
Normal file
28
Creator/Helper/TemporaryDirectory.cs
Normal file
@ -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.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -19,7 +19,7 @@ namespace KattekerCreator.Helper
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string CreateTempDirectory()
|
public static TemporaryDirectory CreateTempDirectory()
|
||||||
{
|
{
|
||||||
string result;
|
string result;
|
||||||
do
|
do
|
||||||
@ -29,7 +29,7 @@ namespace KattekerCreator.Helper
|
|||||||
} while (Directory.Exists(result));
|
} while (Directory.Exists(result));
|
||||||
|
|
||||||
Directory.CreateDirectory(result);
|
Directory.CreateDirectory(result);
|
||||||
return result;
|
return new TemporaryDirectory(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool IsFilesizeWrong(string filename)
|
public static bool IsFilesizeWrong(string filename)
|
||||||
|
@ -52,6 +52,7 @@
|
|||||||
<Compile Include="ApplicationArguments.cs" />
|
<Compile Include="ApplicationArguments.cs" />
|
||||||
<Compile Include="AssemblyFileInfo.cs" />
|
<Compile Include="AssemblyFileInfo.cs" />
|
||||||
<Compile Include="Helper\Log.cs" />
|
<Compile Include="Helper\Log.cs" />
|
||||||
|
<Compile Include="Helper\TemporaryDirectory.cs" />
|
||||||
<Compile Include="IconExtractor\IconExtractor.cs" />
|
<Compile Include="IconExtractor\IconExtractor.cs" />
|
||||||
<Compile Include="IconExtractor\IconUtil.cs" />
|
<Compile Include="IconExtractor\IconUtil.cs" />
|
||||||
<Compile Include="IconExtractor\NativeMethods.cs" />
|
<Compile Include="IconExtractor\NativeMethods.cs" />
|
||||||
|
@ -10,11 +10,12 @@ namespace KattekerCreator
|
|||||||
{
|
{
|
||||||
public class Program
|
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 readonly string _baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
|
||||||
|
private string MakeNsis => Path.Combine(_baseDirectory, "NSIS", "makensis.exe");
|
||||||
private ApplicationArguments _appArguments;
|
private ApplicationArguments _appArguments;
|
||||||
private AssemblyFileInfo _assemblyFileInfo;
|
private AssemblyFileInfo _assemblyFileInfo;
|
||||||
private string _tempDir;
|
private TemporaryDirectory _tempDir;
|
||||||
private Releases _releases;
|
private Releases _releases;
|
||||||
|
|
||||||
private static int Main(string[] args)
|
private static int Main(string[] args)
|
||||||
@ -50,31 +51,33 @@ namespace KattekerCreator
|
|||||||
|
|
||||||
_appArguments = parser.GetObject();
|
_appArguments = parser.GetObject();
|
||||||
//Create tempdir
|
//Create tempdir
|
||||||
_tempDir = Utils.CreateTempDirectory();
|
using (_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[]
|
|
||||||
{
|
{
|
||||||
new PhysicalFile(appStubFile, Path.GetFileName(_appArguments.ProgramFile)),
|
_releases = new Releases(_appArguments.OutputDir);
|
||||||
new PhysicalFile(configFile, Path.Combine($"app-{_assemblyFileInfo.AssemblyVersion}", Path.GetFileName(configFile) ?? string.Empty))
|
parser.ShowProgramArguments();
|
||||||
};
|
//Modify AppStub
|
||||||
var templateFile = GenerateNsisTemplate(additionalFiles);
|
var appStubFile = ModifyAppStub();
|
||||||
//Start makensis.exe
|
//Acquire infos from Executable.
|
||||||
var setupFilePath = CompileSetupScript(templateFile);
|
_assemblyFileInfo = new AssemblyFileInfo(_appArguments, _tempDir.Path);
|
||||||
//Copy to Output-Folder
|
var configFile = CreateConfigFile();
|
||||||
CopyToOutputFolder(setupFilePath);
|
|
||||||
//Create/Modify RELEASE File
|
//Generate NSIS-Script
|
||||||
var releaseEntry = AddPackageToReleaseFile(setupFilePath);
|
var additionalFiles = new[]
|
||||||
//Copy installer as setup.exe
|
{
|
||||||
CopyAsSetup(setupFilePath, releaseEntry);
|
new PhysicalFile(appStubFile, Path.GetFileName(_appArguments.ProgramFile)),
|
||||||
return 0;
|
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)
|
private void CopyAsSetup(string setupFilePath, ReleaseEntry releaseEntry)
|
||||||
@ -117,15 +120,15 @@ namespace KattekerCreator
|
|||||||
File.Copy(setupFilePath, Path.Combine(_appArguments.OutputDir, setupFile), true);
|
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;
|
int exitcode;
|
||||||
using (var p = new Process())
|
using (var p = new Process())
|
||||||
{
|
{
|
||||||
p.StartInfo = new ProcessStartInfo
|
p.StartInfo = new ProcessStartInfo
|
||||||
{
|
{
|
||||||
FileName = Executable,
|
FileName = MakeNsis,
|
||||||
Arguments = $"\"{templateFile}\"",
|
Arguments = $"\"{templateFile}\"",
|
||||||
UseShellExecute = false
|
UseShellExecute = false
|
||||||
};
|
};
|
||||||
@ -133,16 +136,16 @@ namespace KattekerCreator
|
|||||||
p.Start();
|
p.Start();
|
||||||
p.WaitForExit();
|
p.WaitForExit();
|
||||||
exitcode = p.ExitCode;
|
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");
|
return Path.ChangeExtension(templateFile, "exe");
|
||||||
}
|
}
|
||||||
|
|
||||||
private string CreateConfigFile()
|
private string CreateConfigFile()
|
||||||
{
|
{
|
||||||
var pathToFile = Path.Combine(_tempDir, Constants.KattekerConfig);
|
var pathToFile = Path.Combine(_tempDir.Path, Constants.KattekerConfig);
|
||||||
var kattekerConfig = new KattekerConfig
|
var kattekerConfig = new KattekerConfig
|
||||||
{
|
{
|
||||||
Publish = _appArguments.PublishDir ?? _appArguments.OutputDir,
|
Publish = _appArguments.PublishDir ?? _appArguments.OutputDir,
|
||||||
@ -155,7 +158,7 @@ namespace KattekerCreator
|
|||||||
private string ModifyAppStub()
|
private string ModifyAppStub()
|
||||||
{
|
{
|
||||||
var baseFile = new FileInfo(Path.Combine(_baseDirectory, Constants.ExecutionStub));
|
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);
|
Utils.CopyResources(_appArguments.ProgramFile, targetFile.FullName);
|
||||||
return targetFile.FullName;
|
return targetFile.FullName;
|
||||||
}
|
}
|
||||||
@ -166,7 +169,7 @@ namespace KattekerCreator
|
|||||||
{
|
{
|
||||||
try
|
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
|
var setupTmpl = new SetupTmpl
|
||||||
{
|
{
|
||||||
Executable = _assemblyFileInfo.FileInfo.Name,
|
Executable = _assemblyFileInfo.FileInfo.Name,
|
||||||
|
@ -60,33 +60,21 @@
|
|||||||
<Content Include="testdata\Example.exe">
|
<Content Include="testdata\Example.exe">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="testdata\Example.pdb">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="testdata\Example.vshost.exe">
|
<Content Include="testdata\Example.vshost.exe">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="testdata\Katteker.dll">
|
<Content Include="testdata\Katteker.dll">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="testdata\Katteker.pdb">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="testdata\Katteker.UserInterface.dll">
|
<Content Include="testdata\Katteker.UserInterface.dll">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="testdata\Katteker.UserInterface.pdb">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="testdata\Katteker.UserInterface.xml">
|
<Content Include="testdata\Katteker.UserInterface.xml">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="testdata\Microsoft.Practices.ServiceLocation.dll">
|
<Content Include="testdata\Microsoft.Practices.ServiceLocation.dll">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="testdata\Microsoft.Practices.ServiceLocation.pdb">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="testdata\Microsoft.Practices.ServiceLocation.xml">
|
<Content Include="testdata\Microsoft.Practices.ServiceLocation.xml">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
@ -32,6 +32,6 @@ using System.Runtime.InteropServices;
|
|||||||
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
|
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
|
||||||
// indem Sie "*" wie unten gezeigt eingeben:
|
// indem Sie "*" wie unten gezeigt eingeben:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("1.0.4")]
|
[assembly: AssemblyVersion("1.1.0")]
|
||||||
[assembly: AssemblyFileVersion("1.0.4")]
|
[assembly: AssemblyFileVersion("1.1.0")]
|
||||||
[assembly: InternalsVisibleTo("Katteker.Test")]
|
[assembly: InternalsVisibleTo("Katteker.Test")]
|
Loading…
x
Reference in New Issue
Block a user