using System.IO;
using nspector.Native.WINAPI;
namespace nspector.Common.Helper
{
public class ShortcutResolver
{
public static string GetUrlFromInternetShortcut(string filePath)
{
var lines = File.ReadAllLines(filePath);
foreach (var line in lines)
{
if (line.StartsWith("URL="))
{
string[] splitLine = line.Split('=');
if (splitLine.Length > 0)
{
return splitLine[1];
}
}
}
return "";
}
public static string ResolveExecuteable(string filename, out string profileName)
{
var fileInfo = new FileInfo(filename);
profileName = fileInfo.Name.Substring(0, fileInfo.Name.Length - fileInfo.Extension.Length);
try
{
switch (fileInfo.Extension.ToLowerInvariant())
{
case ".lnk": return ResolveFromShellLinkFile(fileInfo.FullName);
case ".url": return ResolveFromUrlFile(fileInfo.FullName);
case ".exe": return fileInfo.Name;
default: return "";
}
}
catch
{
return "";
}
}
private static string ResolveFromShellLinkFile(string filename)
{
var shellLink = new ShellLink(filename);
if (shellLink.Arguments.StartsWith(SteamAppResolver.SteamUrlPattern))
{
var resolver = new SteamAppResolver();
return resolver.ResolveExeFromSteamUrl(shellLink.Arguments);
}
var targetInfo = new FileInfo(shellLink.Target);
if (targetInfo.Name.ToLowerInvariant() == SteamAppResolver.SteamExeName)
{
if (shellLink.Arguments.Contains(SteamAppResolver.SteamArgumentPattern))
{
var resolver = new SteamAppResolver();
return resolver.ResolveExeFromSteamArguments(shellLink.Arguments);
}
}
if (targetInfo.Extension.ToLowerInvariant().Equals(".exe"))
{
return targetInfo.Name;
}
return "";
}
private static string ResolveFromUrlFile(string filename)
{
var url = GetUrlFromInternetShortcut(filename);
if (url.StartsWith(SteamAppResolver.SteamUrlPattern))
{
var resolver = new SteamAppResolver();
return resolver.ResolveExeFromSteamUrl(url);
}
return "";
}
}
}