diff --git a/Build/Tools/mkisofs.exe b/Build/Tools/mkisofs.exe
deleted file mode 100644
index 957d8a7414..0000000000
Binary files a/Build/Tools/mkisofs.exe and /dev/null differ
diff --git a/Build/Tools/mkisofs/mkisofs.exe b/Build/Tools/mkisofs/mkisofs.exe
new file mode 100644
index 0000000000..4b131f36b2
Binary files /dev/null and b/Build/Tools/mkisofs/mkisofs.exe differ
diff --git a/Build/Tools/mkisofs/readme.txt b/Build/Tools/mkisofs/readme.txt
new file mode 100644
index 0000000000..41bfd5987d
--- /dev/null
+++ b/Build/Tools/mkisofs/readme.txt
@@ -0,0 +1,6 @@
+
+mkisofs
+- GPLv2
+- http://code.google.com/p/mkisofs-md5/
+- Version: 2.01
+
diff --git a/Setup/Cosmos.iss b/Setup/Cosmos.iss
index 7d43ab36ca..f22d25e1db 100644
--- a/Setup/Cosmos.iss
+++ b/Setup/Cosmos.iss
@@ -156,6 +156,7 @@ Source: ".\Resources\Dependencies\cecil\Mono.Cecil.Pdb.pdb"; DestDir: "{app}\Bui
Source: ".\Build\Tools\*.exe"; DestDir: "{app}\Build\Tools"; Flags: ignoreversion uninsremovereadonly
Source: ".\Build\Tools\NAsm\*.exe"; DestDir: "{app}\Build\Tools\NAsm"; Flags: ignoreversion uninsremovereadonly
Source: ".\Build\Tools\Cygwin\*"; DestDir: "{app}\Build\Tools\cygwin"; Flags: ignoreversion uninsremovereadonly overwritereadonly
+Source: ".\Build\Tools\mkisofs\*"; DestDir: "{app}\Build\Tools\mkisofs"; Flags: ignoreversion uninsremovereadonly overwritereadonly
;
Source: ".\Build\VSIP\Cosmos.Deploy.USB.exe"; DestDir: "{app}\Build\Tools"; Flags: ignoreversion uninsremovereadonly
Source: ".\Build\VSIP\Cosmos.Build.Common.dll"; DestDir: "{app}\Build\Tools"; Flags: ignoreversion uninsremovereadonly
diff --git a/source/Cosmos.Build.Common/Cosmos.Build.Common.csproj b/source/Cosmos.Build.Common/Cosmos.Build.Common.csproj
index c9e01cdd36..5c6683bf4a 100644
--- a/source/Cosmos.Build.Common/Cosmos.Build.Common.csproj
+++ b/source/Cosmos.Build.Common/Cosmos.Build.Common.csproj
@@ -81,6 +81,7 @@
+
diff --git a/source/Cosmos.Build.Common/IsoMaker.cs b/source/Cosmos.Build.Common/IsoMaker.cs
index 665dcbf268..5fd27daab8 100644
--- a/source/Cosmos.Build.Common/IsoMaker.cs
+++ b/source/Cosmos.Build.Common/IsoMaker.cs
@@ -1,30 +1,54 @@
using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
using System.IO;
-using System.Diagnostics;
-
-namespace Cosmos.Build.Common {
- public class IsoMaker {
-
- static public void Generate(string aBuildPath, string xInputPathname, string aIsoPathname) {
- string xPath = Path.Combine(aBuildPath, @"ISO");
- if (File.Exists(aIsoPathname)) {
- File.Delete(aIsoPathname);
- }
-
- string xIsoLinux = Path.Combine(xPath, "isolinux.bin");
- File.SetAttributes(xIsoLinux, FileAttributes.Normal);
-
- var xPSI = new ProcessStartInfo(
- Path.Combine(CosmosPaths.Tools, "mkisofs.exe"),
- String.Format("-R -b \"{0}\" -no-emul-boot -boot-load-size 4 -boot-info-table -o \"{1}\" \"{2}\"",
- xIsoLinux, aIsoPathname, xPath)
- );
- xPSI.UseShellExecute = false;
- xPSI.CreateNoWindow = true;
- Process.Start(xPSI);
+using System.Text;
+
+namespace Cosmos.Build.Common
+{
+ public class IsoMaker
+ {
+ static public void Generate(string imageFile, string isoFilename)
+ {
+ var destinationDirectory = Path.GetDirectoryName(imageFile);
+
+ string isoDirectory = Path.Combine(destinationDirectory, "iso");
+
+ if (Directory.Exists(isoDirectory))
+ {
+ Directory.Delete(isoDirectory, true);
+ }
+
+ Directory.CreateDirectory(isoDirectory);
+
+ var buildISO = Path.Combine(CosmosPaths.Build, "ISO");
+
+ File.Copy(Path.Combine(buildISO, "isolinux.bin"), Path.Combine(isoDirectory, "isolinux.bin"));
+ File.Copy(Path.Combine(buildISO, "mboot.c32"), Path.Combine(isoDirectory, "mboot.c32"));
+ File.Copy(Path.Combine(buildISO, "syslinux.cfg"), Path.Combine(isoDirectory, "syslinux.cfg"));
+ File.Copy(imageFile, Path.Combine(isoDirectory, "Cosmos.bin"));
+
+ string arg =
+ "-relaxed-filenames" +
+ " -J -R" +
+ " -o " + Quote(isoFilename) +
+ " -b isolinux.bin" +
+ " -no-emul-boot" +
+ " -boot-load-size 4" +
+ " -boot-info-table " +
+ Quote(isoDirectory);
+
+ var output = ProcessExtension.LaunchApplication(
+ Path.Combine(Path.Combine(CosmosPaths.Tools, "mkisofs"), "mkisofs.exe"),
+ arg,
+ true
+ );
+
+ File.WriteAllText(Path.ChangeExtension(isoFilename, ".log"), output);
+ }
+
+ protected static string Quote(string location)
+ {
+ return '"' + location + '"';
+ }
+
}
- }
-}
+}
\ No newline at end of file
diff --git a/source/Cosmos.Build.Common/ProcessExtension.cs b/source/Cosmos.Build.Common/ProcessExtension.cs
new file mode 100644
index 0000000000..1bb7a50170
--- /dev/null
+++ b/source/Cosmos.Build.Common/ProcessExtension.cs
@@ -0,0 +1,32 @@
+using System.Diagnostics;
+
+namespace Cosmos.Build.Common
+{
+ public static class ProcessExtension
+ {
+ public static string LaunchApplication(string app, string args, bool waitForExit)
+ {
+ var start = new ProcessStartInfo();
+ start.FileName = app;
+ start.Arguments = args;
+ start.UseShellExecute = false;
+ start.CreateNoWindow = true;
+ start.RedirectStandardOutput = true;
+ start.RedirectStandardError = true;
+
+ var process = Process.Start(start);
+
+ if (waitForExit)
+ {
+ var output = process.StandardOutput.ReadToEnd();
+
+ process.WaitForExit();
+
+ var error = process.StandardError.ReadToEnd();
+ return output + error;
+ }
+
+ return string.Empty;
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/Cosmos.Build.MSBuild/MakeISO.cs b/source/Cosmos.Build.MSBuild/MakeISO.cs
index 25f1e2fcbf..426e361fc8 100644
--- a/source/Cosmos.Build.MSBuild/MakeISO.cs
+++ b/source/Cosmos.Build.MSBuild/MakeISO.cs
@@ -31,7 +31,7 @@ public string CosmosBuildDir {
#endregion
public override bool Execute() {
- IsoMaker.Generate(CosmosBuildDir, InputFile, OutputFile);
+ IsoMaker.Generate(InputFile, OutputFile);
return true;
}
}
diff --git a/source/Cosmos.VS.Package/VsProjectConfig.cs b/source/Cosmos.VS.Package/VsProjectConfig.cs
index 54f12a0296..fced1cea95 100644
--- a/source/Cosmos.VS.Package/VsProjectConfig.cs
+++ b/source/Cosmos.VS.Package/VsProjectConfig.cs
@@ -40,7 +40,7 @@ public override int DebugLaunch(uint aLaunch) {
string xBinFile = Path.ChangeExtension(xOutputAsm, ".bin");
if (xDeployment == DeploymentType.ISO) {
- IsoMaker.Generate(CosmosPaths.Build, xBinFile, xIsoFile);
+ IsoMaker.Generate(xBinFile, xIsoFile);
} else if (xDeployment == DeploymentType.USB) {
Process.Start(Path.Combine(CosmosPaths.Tools, "Cosmos.Deploy.USB.exe"), "\"" + xBinFile + "\"");