mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
DllExporter: Improve ildasm.exe path detection
This commit is contained in:
parent
c833f604c5
commit
1aa242b5c9
@ -2,6 +2,6 @@
|
|||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
[assembly: AssemblyCopyright("© 2011 - Birunthan Mohanathas")]
|
[assembly: AssemblyCopyright("© 2013 - Birunthan Mohanathas")]
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
[assembly: AssemblyVersion("1.0.1.0")]
|
||||||
[assembly: AssemblyProduct("Rainmeter")]
|
[assembly: AssemblyProduct("Rainmeter")]
|
@ -21,6 +21,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using Microsoft.Build.Utilities;
|
using Microsoft.Build.Utilities;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
namespace DllExporter
|
namespace DllExporter
|
||||||
{
|
{
|
||||||
@ -36,28 +37,20 @@ namespace DllExporter
|
|||||||
string targetResName = targetDllName + ".res";
|
string targetResName = targetDllName + ".res";
|
||||||
|
|
||||||
string ilasmPath = ToolLocationHelper.GetPathToDotNetFrameworkFile("ilasm.exe", TargetDotNetFrameworkVersion.Version20);
|
string ilasmPath = ToolLocationHelper.GetPathToDotNetFrameworkFile("ilasm.exe", TargetDotNetFrameworkVersion.Version20);
|
||||||
if (!System.IO.File.Exists(ilasmPath))
|
if (!File.Exists(ilasmPath))
|
||||||
{
|
{
|
||||||
Console.WriteLine("DllExporter error: ilasm.exe not found");
|
Console.WriteLine("DllExporter error: ilasm.exe not found");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
string ildasmPath = Environment.ExpandEnvironmentVariables(@"%ProgramFiles%\Microsoft SDKs\Windows\v7.0A\Bin\ildasm.exe");
|
string ildasmPath = FindIldasmPath();
|
||||||
if (!System.IO.File.Exists(ildasmPath))
|
if (ildasmPath == null)
|
||||||
{
|
|
||||||
ildasmPath = Environment.ExpandEnvironmentVariables(@"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.0A\Bin\ildasm.exe");
|
|
||||||
if (!System.IO.File.Exists(ildasmPath))
|
|
||||||
{
|
|
||||||
ildasmPath = Environment.ExpandEnvironmentVariables(@"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\ildasm.exe");
|
|
||||||
if (!System.IO.File.Exists(ildasmPath))
|
|
||||||
{
|
{
|
||||||
Console.WriteLine("DllExporter error: ildasm.exe not found");
|
Console.WriteLine("DllExporter error: ildasm.exe not found");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
System.IO.Directory.SetCurrentDirectory(targetDirectory);
|
Directory.SetCurrentDirectory(targetDirectory);
|
||||||
|
|
||||||
bool is64 = platformTarget.ToLower().Equals("x64");
|
bool is64 = platformTarget.ToLower().Equals("x64");
|
||||||
bool isDebug = configurationName.ToLower().Equals("debug");
|
bool isDebug = configurationName.ToLower().Equals("debug");
|
||||||
@ -84,10 +77,10 @@ namespace DllExporter
|
|||||||
return ildasmProc.ExitCode;
|
return ildasmProc.ExitCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hasResource = System.IO.File.Exists(targetResName);
|
bool hasResource = File.Exists(targetResName);
|
||||||
|
|
||||||
// Read disassembly and find methods marked with DllExport attribute
|
// Read disassembly and find methods marked with DllExport attribute
|
||||||
List<string> lines = new List<string>(System.IO.File.ReadAllLines(targetIlName));
|
List<string> lines = new List<string>(File.ReadAllLines(targetIlName));
|
||||||
int attributeIndex = 0;
|
int attributeIndex = 0;
|
||||||
int exportCount = 0;
|
int exportCount = 0;
|
||||||
while (true)
|
while (true)
|
||||||
@ -151,7 +144,7 @@ namespace DllExporter
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Write everything back
|
// Write everything back
|
||||||
System.IO.File.WriteAllLines(targetIlName, lines.ToArray());
|
File.WriteAllLines(targetIlName, lines.ToArray());
|
||||||
|
|
||||||
// Reassemble
|
// Reassemble
|
||||||
Process ilasmProc = new Process();
|
Process ilasmProc = new Process();
|
||||||
@ -172,10 +165,60 @@ namespace DllExporter
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Cleanup
|
// Cleanup
|
||||||
System.IO.File.Delete(targetIlName);
|
File.Delete(targetIlName);
|
||||||
System.IO.File.Delete(targetResName);
|
File.Delete(targetResName);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Finds path to ildasm.exe.
|
||||||
|
/// </summary>
|
||||||
|
private static string FindIldasmPath()
|
||||||
|
{
|
||||||
|
var sdkPath = Environment.ExpandEnvironmentVariables(@"%ProgramFiles%\Microsoft SDKs\Windows\");
|
||||||
|
if (!Directory.Exists(sdkPath))
|
||||||
|
{
|
||||||
|
sdkPath = Environment.ExpandEnvironmentVariables(@"%ProgramFiles(x86)%\Microsoft SDKs\Windows\");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Directory.Exists(sdkPath))
|
||||||
|
{
|
||||||
|
throw new DirectoryNotFoundException("'Microsoft SDKs' directory not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the version directories in reverse order (i.e. newest version first).
|
||||||
|
var sdkVersionDirectories = Directory.GetDirectories(sdkPath);
|
||||||
|
Array.Reverse(sdkVersionDirectories);
|
||||||
|
|
||||||
|
foreach (var sdkVersionDirectory in sdkVersionDirectories)
|
||||||
|
{
|
||||||
|
var binDirectory = Path.Combine(sdkVersionDirectory, @"bin");
|
||||||
|
if (!Directory.Exists(binDirectory))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for e.g. 'Microsoft SDKs\v8.0A\bin\ildasm.exe'.
|
||||||
|
var ildasmPath = Path.Combine(binDirectory, @"ildasm.exe");
|
||||||
|
if (File.Exists(ildasmPath))
|
||||||
|
{
|
||||||
|
return ildasmPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for e.g. 'Microsoft SDKs\v8.0A\bin\NETFX 4.0 Tools\ildasm.exe'.
|
||||||
|
var toolsDirectories = Directory.GetDirectories(binDirectory, "NETFX*Tools");
|
||||||
|
foreach (var toolDirectory in toolsDirectories)
|
||||||
|
{
|
||||||
|
ildasmPath = Path.Combine(toolDirectory, @"ildasm.exe");
|
||||||
|
if (File.Exists(ildasmPath))
|
||||||
|
{
|
||||||
|
return ildasmPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user