[Windows Phone 7 Development and Hacking] b0l0k:
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Reflection;
using System.Xml.XPath;
using Microsoft.SmartDevice.Connectivity;

internal static class Utils
{
// Fields
private const string AppIconFileName = "ApplicationIcon.png";
private const string AppNode = "//App";
private const string DefaultAppIcon = "Microsoft.Phone.Tools.DefaultAppIcon.png";
private const string ProductIdNode = "ProductID";
private const string WMAppManifestFile = "WMAppManifest.xml";

// Methods
internal static string ExtractIconFile(string xapPath)
{
string str2;
try
{
using (FileStream stream = new FileStream(xapPath, FileMode.Open, FileAccess.Read))
{
Stream fileStream = new ZipArchive(stream).GetFileStream("ApplicationIcon.png");
if (fileStream == null)
{
fileStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Microsoft.Phone.Tools.DefaultAppIcon.png");
}
string tempFileName = Path.GetTempFileName();
using (FileStream stream3 = new FileStream(tempFileName, FileMode.Create))
{
fileStream.CopyTo(stream3);
}
str2 = tempFileName;
}
}
catch (Exception)
{
str2 = null;
}
return str2;
}

internal static DeviceInfo[] GetDevices()
{
List<DeviceInfo> list = new List<DeviceInfo>();
DatastoreManager manager = new DatastoreManager(0x409);
foreach (Platform platform in manager.GetPlatforms())
{
foreach (Device device in platform.GetDevices())
{
list.Add(new DeviceInfo(platform.Id.ToString(), device.Id.ToString(), device.Name));
}
}
return list.ToArray();
}

internal static Guid? GetXapGuid(string xapPath)
{
Guid? nullable;
try
{
using (FileStream stream = new FileStream(xapPath, FileMode.Open, FileAccess.Read))
{
ZipArchive archive = new ZipArchive(stream);
using (Stream stream2 = archive.GetFileStream("WMAppManifest.xml"))
{
XPathDocument document = new XPathDocument(stream2);
nullable = new Guid(document.CreateNavigator().SelectSingleNode("//App").GetAttribute("ProductID", string.Empty));
}
}
}
catch (Exception)
{
nullable = null;
}
return nullable;
}

internal static RemoteApplication InstallApplication(DeviceInfo deviceInfo, Guid appGuid, string applicationGenre, string iconFile, string xapFile)
{
DatastoreManager manager = new DatastoreManager(0x409);
Device device = manager.GetPlatform(new ObjectId(deviceInfo.PlatformId)).GetDevice(new ObjectId(deviceInfo.DeviceId));
device.Connect();
if (device.IsApplicationInstalled(appGuid))
{
RemoteApplication application = device.GetApplication(appGuid);
application.TerminateRunningInstances();
application.Uninstall();
}
RemoteApplication installApplication = device.InstallApplication(appGuid, appGuid, applicationGenre, iconFile, xapFile);

installApplication.Launch();

return installApplication;
}

internal class DeviceInfo
{

// Methods
internal DeviceInfo(string platformId, string deviceid, string deviceName)
{
this.PlatformId = platformId;
this.DeviceId = deviceid;
this.DeviceName = deviceName;
}

public override string ToString()
{
return this.DeviceName;
}

// Properties
internal string DeviceId
{
get;
set;
}

internal string DeviceName
{
get;
set;
}

internal string PlatformId { get; set; }
}
internal class ZipArchive
{
// Fields
private List<ZipArchiveFile> fileList = new List<ZipArchiveFile>();
private FileStream stream;

// Methods
internal ZipArchive(FileStream stream)
{
this.stream = stream;
for (ZipArchiveFile file = ZipArchiveFile.ReadHeader(stream); file != null; file = ZipArchiveFile.ReadHeader(stream))
{
this.fileList.Add(file);
}
}

internal Stream GetFileStream(string filename)
{
foreach (ZipArchiveFile file in this.fileList)
{
if (string.Compare(file.Name, filename, true) == 0)
{
return file.GetUncompressedStream(this.stream);
}
}
return null;
}
}

internal class DeployArguments
{

internal DeployArguments(DeviceInfo deviceInfo, System.Guid guid, string icon, string xap, OnCompleteAction onComplete)
{
this.DeviceInfo = deviceInfo;
this.Guid = guid;
this.Icon = icon;
this.Xap = xap;
this.OnComplete = onComplete;
}

internal DeviceInfo DeviceInfo
{
get;
set;
}

internal System.Guid Guid
{
get;
set;
}

internal string Icon
{
get;
set;
}

internal OnCompleteAction OnComplete
{
get;
set;
}

internal string Xap { get; set; }

internal delegate void OnCompleteAction(Exception ex);
}

internal class ZipArchiveFile
{

private ushort compressMethod;
private long dataPosition;

// Methods
private ZipArchiveFile()
{
}

internal Stream GetUncompressedStream(Stream zipStream)
{
zipStream.Seek(this.dataPosition, SeekOrigin.Begin);
switch (this.compressMethod)
{
case 0:
return zipStream;

case 8:
return new DeflateStream(zipStream, CompressionMode.Decompress);
}
return null;
}

internal static ZipArchiveFile ReadHeader(FileStream stream)
{
BinaryReader reader = new BinaryReader(stream);
if (reader.ReadUInt32() != 0x4034b50)
{
return null;
}
ZipArchiveFile file = new ZipArchiveFile();
reader.ReadUInt16();
reader.ReadUInt16();
file.compressMethod = reader.ReadUInt16();
reader.ReadUInt16();
reader.ReadUInt16();
reader.ReadUInt32();
uint num2 = reader.ReadUInt32();
reader.ReadUInt32();
ushort count = reader.ReadUInt16();
ushort num4 = reader.ReadUInt16();
file.Name = new string(reader.ReadChars(count));
reader.ReadBytes(num4);
file.dataPosition = reader.BaseStream.Position;
reader.BaseStream.Seek((long)num2, SeekOrigin.Current);
return file;
}

// Properties
internal string Name { get; set; }
}

}

And

Utils.InstallApplication(Utils.GetDevices()[0], Utils.GetXapGuid(FILENAME).Value, "NormalApp", Utils.ExtractIconFile(FILENAME).Icon, FILENAME);

Regs,

b0l0k