private static void DeployApplication( DeployAppMode mode, DeviceInfo deviceInfo, IAppManifestInfo manifestInfo, DeploymentOptions deploymentOptions, string packageFile, bool disconnect = true) { if (PackageType.Framework != manifestInfo.PackageType && WinTrust.VerifyEmbeddedSignature(packageFile)) { throw new Exception( string.Format( CultureInfo.CurrentUICulture, Resources.InvalidPackaging, new object[0])); } var connectableDevice = new MultiTargetingConnectivity(CultureInfo.CurrentUICulture.LCID).GetConnectableDevice( deviceInfo.DeviceId); var device = connectableDevice.Connect(true); var systemInfo = device.GetSystemInfo(); var deviceVersion = new Version(systemInfo.OSMajor, systemInfo.OSMinor); if (manifestInfo.PlatformVersion.CompareTo(deviceVersion) > 0) { device.Disconnect(); throw new Exception( string.Format( CultureInfo.CurrentUICulture, Resources.XapNotSupportedOnDevice, new object[0])); } var flag = IsTargetApplicableforMdilGeneration( connectableDevice, deviceVersion, manifestInfo, packageFile); ApplySideloadFlags(manifestInfo, ref deploymentOptions); if (mode == DeployAppMode.Install) { if (device.IsApplicationInstalled(manifestInfo.ProductId)) { if (manifestInfo.PackageType == PackageType.Framework) { return; } device.GetApplication(manifestInfo.ProductId).Uninstall(); } foreach (var str in DependencyFinder.GetAppDependencyPackages(packageFile)) { var manifestInfo1 = ReadAppManifestInfoFromPackage(str); DeployApplication( DeployAppMode.Install, deviceInfo, manifestInfo1, DeploymentOptions.OptOutSD, str, false); } } var app = (IRemoteApplication)null; if (mode == DeployAppMode.Update) { app = device.GetApplication(manifestInfo.ProductId); } var typeOfApp = DetermineAppType(packageFile); var applicationGenre = ((int)deploymentOptions).ToString(CultureInfo.InvariantCulture); var iconPath = ((int)manifestInfo.PackageType).ToString(CultureInfo.InvariantCulture); switch (mode) { case DeployAppMode.Install: break; case DeployAppMode.Update: break; } var path = (string)null; try { if (IsMdilFirst(typeOfApp, manifestInfo)) { if (flag) { path = GenerateNDeployMdil(packageFile, null, typeOfApp, manifestInfo); packageFile = path; } switch (mode) { case DeployAppMode.Install: app = device.InstallApplication( manifestInfo.ProductId, manifestInfo.ProductId, applicationGenre, iconPath, packageFile); break; case DeployAppMode.Update: app.UpdateApplication(applicationGenre, iconPath, packageFile); break; } } else { switch (mode) { case DeployAppMode.Install: app = device.InstallApplication( manifestInfo.ProductId, manifestInfo.ProductId, applicationGenre, iconPath, packageFile); break; case DeployAppMode.Update: app.UpdateApplication(applicationGenre, iconPath, packageFile); break; } if (flag) { path = GenerateNDeployMdil(packageFile, app, typeOfApp, manifestInfo); } } } finally { if (!GlobalOptions.LeaveBehindOptimized && !string.IsNullOrWhiteSpace(path) && File.Exists(path)) { File.Delete(path); } } if (GlobalOptions.LaunchAfterInstall && app != null) { app.Launch(); } if (!disconnect) { return; } device.Disconnect(); }
private static void DeployApplication( DeployAppMode mode, DeviceInfo deviceInfo, IAppManifestInfo manifestInfo, DeploymentOptions deploymentOptions, string packageFile, bool disconnect = true) { if (PackageType.Framework != manifestInfo.PackageType && WinTrust.VerifyEmbeddedSignature(packageFile)) { throw new Exception( string.Format( CultureInfo.CurrentUICulture, Resources.InvalidPackaging, new object[0])); } var connectableDevice = new MultiTargetingConnectivity(CultureInfo.CurrentUICulture.LCID).GetConnectableDevice( deviceInfo.DeviceId); var device = connectableDevice.Connect(true); var systemInfo = device.GetSystemInfo(); var deviceVersion = new Version(systemInfo.OSMajor, systemInfo.OSMinor); if (manifestInfo.PlatformVersion.CompareTo(deviceVersion) > 0) { device.Disconnect(); throw new Exception( string.Format( CultureInfo.CurrentUICulture, Resources.XapNotSupportedOnDevice, new object[0])); } var flag = IsTargetApplicableforMdilGeneration( connectableDevice, deviceVersion, manifestInfo, packageFile); ApplySideloadFlags(manifestInfo, ref deploymentOptions); if (mode == DeployAppMode.Install) { if (device.IsApplicationInstalled(manifestInfo.ProductId)) { if (manifestInfo.PackageType == PackageType.Framework) { return; } device.GetApplication(manifestInfo.ProductId).Uninstall(); } foreach (var str in DependencyFinder.GetAppDependencyPackages(packageFile)) { var manifestInfo1 = ReadAppManifestInfoFromPackage(str); DeployApplication( DeployAppMode.Install, deviceInfo, manifestInfo1, DeploymentOptions.OptOutSD, str, false); } } var app = (IRemoteApplication)null; if (mode == DeployAppMode.Update) { app = device.GetApplication(manifestInfo.ProductId); } var typeOfApp = DetermineAppType(packageFile); var applicationGenre = ((int)deploymentOptions).ToString(CultureInfo.InvariantCulture); var iconPath = ((int)manifestInfo.PackageType).ToString(CultureInfo.InvariantCulture); switch (mode) { case DeployAppMode.Install: break; case DeployAppMode.Update: break; } var path = (string)null; try { if (IsMdilFirst(typeOfApp, manifestInfo)) { if (flag) { path = GenerateNDeployMdil(packageFile, null, typeOfApp, manifestInfo); packageFile = path; } switch (mode) { case DeployAppMode.Install: app = device.InstallApplication( manifestInfo.ProductId, manifestInfo.ProductId, applicationGenre, iconPath, packageFile); break; case DeployAppMode.Update: app.UpdateApplication(applicationGenre, iconPath, packageFile); break; } } else { switch (mode) { case DeployAppMode.Install: app = device.InstallApplication( manifestInfo.ProductId, manifestInfo.ProductId, applicationGenre, iconPath, packageFile); break; case DeployAppMode.Update: app.UpdateApplication(applicationGenre, iconPath, packageFile); break; } if (flag) { path = GenerateNDeployMdil(packageFile, app, typeOfApp, manifestInfo); } } } finally { if (!GlobalOptions.LeaveBehindOptimized && !string.IsNullOrWhiteSpace(path) && File.Exists(path)) { File.Delete(path); } } if (GlobalOptions.LaunchAfterInstall && app != null) { app.Launch(); } if (!disconnect) { return; } device.Disconnect(); }