Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uygulamanızı MSIX olarak gönderirken program aracılığıyla uygulamanızın güncelleştirmesini başlatabilirsiniz. Uygulamanızı Mağaza'nın dışına dağıtırsanız tek yapmanız gereken uygulamanızın yeni sürümü için sunucunuzu denetlemek ve yeni sürümü yüklemektir. Güncelleştirmeyi nasıl uygulayacağınız, uygulama paketinizi bir Uygulama Yükleyicisi dosyası kullanarak dağıtıp dağıtmadığınıza bağlıdır. Kodunuzdan güncelleştirmeleri uygulamak için, uygulama paketiniz packageManagement özelliğini belirtmelidir. Bunun yayımcılar arası senaryo için gerekli olduğunu, ancak kendi uygulamanızı yönetmenin özelliği bildirmek zorunda kalmadan çalışması gerektiğini unutmayın.
Bu makale, paket bildiriminizdeki packageManagement yeteneğini nasıl bildireceğinizi ve kodunuzdan bir güncellemeyi nasıl uygulayacağınızı gösteren örnekler sağlar. İlk bölümde, Uygulama Yükleyicisi dosyasını kullanıyorsanız bunun nasıl yapıldığını ve ikinci bölümde de Uygulama Yükleyicisi dosyasını kullanmadığınızda bunun nasıl yapılacağının nasıl olduğu anlatılır. Son bölümde, bir güncelleştirme uygulandıktan sonra uygulamanızın yeniden başlatıldığından nasıl emin olunacağı açıklanmıştır.
Paket bildiriminize PackageManagement Özelliğini ekleme
API'leri PackageManager kullanmak için uygulamanızın packageManagementpaket bildiriminizdekısıtlanmış özelliği bildirmesi gerekir.
<Package>
...
<Capabilities>
<rescap:Capability Name="packageManagement" />
</Capabilities>
...
</Package>
Uygulama Yükleyicisi dosyası kullanılarak dağıtılan paketleri güncelleştirme
Uygulamanızı Uygulama Yükleyicisi dosyasını kullanarak dağıtıyorsanız, gerçekleştirdiğiniz kod temelli güncelleştirmelerin Uygulama Yükleyicisi dosya API'lerini kullanması gerekir. Bunun yapılması normal Uygulama Yükleyicisi dosya güncelleştirmelerinizin çalışmaya devam etmesini sağlar. Uygulama Yükleyicisi tabanlı bir güncelleştirmeyi kodunuzdan başlatma için PackageManager.AddPackageByAppInstallerFileAsync veya PackageManager.RequestAddPackageByAppInstallerFileAsync kullanabilirsiniz. Package.CheckUpdateAvailabilityAsync API'sini kullanarak bir güncelleştirmenin kullanılabilir olup olmadığını de kontrol edebilirsiniz. Aşağıda örnek kod verilmiştir:
using Windows.Management.Deployment;
public async void CheckForAppInstallerUpdatesAndLaunchAsync(string targetPackageFullName, PackageVolume packageVolume)
{
// Get the current app's package for the current user.
PackageManager pm = new PackageManager();
Package package = pm.FindPackageForUser(string.Empty, targetPackageFullName);
PackageUpdateAvailabilityResult result = await package.CheckUpdateAvailabilityAsync();
switch (result.Availability)
{
case PackageUpdateAvailability.Available:
case PackageUpdateAvailability.Required:
//Queue up the update and close the current instance
await pm.AddPackageByAppInstallerFileAsync(
new Uri("https://trial3.azurewebsites.net/HRApp/HRApp.appinstaller"),
AddPackageByAppInstallerOptions.ForceApplicationShutdown,
packageVolume);
break;
case PackageUpdateAvailability.NoUpdates:
// Close AppInstaller.
await ConsolidateAppInstallerView();
break;
case PackageUpdateAvailability.Unknown:
default:
// Log and ignore error.
Logger.Log($"No update information associated with app {targetPackageFullName}");
// Launch target app and close AppInstaller.
await ConsolidateAppInstallerView();
break;
}
}
Uygulama Yükleyicisi dosyası olmadan dağıtılan paketleri güncelleştirme
Sunucunuzdaki güncelleştirmeleri denetleme
Uygulama paketinizi dağıtmak için Uygulama Yükleyicisi dosyasını kullanmıyorsanız , ilk adım uygulamanızın yeni bir sürümünün kullanılabilir olup olmadığını doğrudan denetlemektir. Aşağıdaki örnek, bir sunucudaki paketin sürümünün uygulamanın geçerli sürümünden daha büyük olup olmadığını denetler (bu örnek, tanıtım amacıyla bir test sunucusuna başvurur).
using Windows.Management.Deployment;
//check for an update on my server
private async void CheckUpdate(object sender, TappedRoutedEventArgs e)
{
WebClient client = new WebClient();
Stream stream = client.OpenRead("https://trial3.azurewebsites.net/HRApp/Version.txt");
StreamReader reader = new StreamReader(stream);
var newVersion = new Version(await reader.ReadToEndAsync());
Package package = Package.Current;
PackageVersion packageVersion = package.Id.Version;
var currentVersion = new Version(string.Format("{0}.{1}.{2}.{3}", packageVersion.Major, packageVersion.Minor, packageVersion.Build, packageVersion.Revision));
//compare package versions
if (newVersion.CompareTo(currentVersion) > 0)
{
var messageDialog = new MessageDialog("Found an update.");
messageDialog.Commands.Add(new UICommand(
"Update",
new UICommandInvokedHandler(this.CommandInvokedHandler)));
messageDialog.Commands.Add(new UICommand(
"Close",
new UICommandInvokedHandler(this.CommandInvokedHandler)));
messageDialog.DefaultCommandIndex = 0;
messageDialog.CancelCommandIndex = 1;
await messageDialog.ShowAsync();
} else
{
var messageDialog = new MessageDialog("Did not find an update.");
await messageDialog.ShowAsync();
}
}
Uyarı
targetPackageFileName, paketlenmiş uygulamanın tam adının temsilcisidir. (Örnek: Contoso.HeadTrax_1.0.0.0_x64__PublisherHash)
Güncelleştirmeyi uygulama
Bir güncelleştirmenin kullanılabilir olduğunu belirledikten sonra AddPackageAsync API'sini kullanarak indirme ve yükleme için kuyruğa alabilirsiniz. Ayrıca, ana paket cihazda zaten yüklü olduğu sürece isteğe bağlı bir paket yüklemek için de çalışmalıdır. Güncelleştirme, uygulamanız bir sonraki kapatılışında uygulanır. Uygulama yeniden başlatıldıktan sonra yeni sürüm kullanıcının kullanımına sunulacaktır. Aşağıda örnek kod verilmiştir:
// Queue up the update and close the current app instance.
private async void CommandInvokedHandler(IUICommand command)
{
if (command.Label == "Update")
{
PackageManager packagemanager = new PackageManager();
await packagemanager.AddPackageAsync(
new Uri("https://trial3.azurewebsites.net/HRApp/HRApp.msix"),
null,
AddPackageOptions.ForceApplicationShutdown
);
}
}
Güncelleştirmeden sonra uygulamanızı otomatik olarak yeniden başlatma
Uygulamanız bir UWP uygulamasıysa, bir güncelleştirme uygulanırken AddPackageByAppInstallerOptions.ForceApplicationShutdown veya AddPackageOptions.ForceTargetAppShutdown'ı kullanmanın kapatma ve güncelleştirme sonrasında uygulamayı yeniden başlatacak şekilde zamanlanması gerekir. UWP olmayan uygulamalar için güncelleştirmeyi uygulamadan önce RegisterApplicationRestart çağrısı yapmanız gerekir.
Uygulamanız kapanmaya başlamadan önce RegisterApplicationRestart çağrısında bulunması gerekir. Aşağıda, C# dilinde yerel yöntemi çağırmak için birlikte çalışma hizmetlerini kullanarak bunu yapma örneği verilmiştir:
// Register the active instance of an application for restart in your Update method
uint res = RelaunchHelper.RegisterApplicationRestart(null, RelaunchHelper.RestartFlags.NONE);
C# dilinde yerel RegisterApplicationRestart yöntemini çağırmak için yardımcı sınıf örneği:
using System;
using System.Runtime.InteropServices;
namespace MyEmployees.Helpers
{
class RelaunchHelper
{
#region Restart Manager Methods
/// <summary>
/// Registers the active instance of an application for restart.
/// </summary>
/// <param name="pwzCommandLine">
/// A pointer to a Unicode string that specifies the command-line arguments for the application when it is restarted.
/// The maximum size of the command line that you can specify is RESTART_MAX_CMD_LINE characters. Do not include the name of the executable
/// in the command line; this function adds it for you.
/// If this parameter is NULL or an empty string, the previously registered command line is removed. If the argument contains spaces,
/// use quotes around the argument.
/// </param>
/// <param name="dwFlags">One of the options specified in RestartFlags</param>
/// <returns>
/// This function returns S_OK on success or one of the following error codes:
/// E_FAIL for internal error.
/// E_INVALIDARG if rhe specified command line is too long.
/// </returns>
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
internal static extern uint RegisterApplicationRestart(string pwzCommandLine, RestartFlags dwFlags);
#endregion Restart Manager Methods
#region Restart Manager Enums
/// <summary>
/// Flags for the RegisterApplicationRestart function
/// </summary>
[Flags]
internal enum RestartFlags
{
/// <summary>None of the options below.</summary>
NONE = 0,
/// <summary>Do not restart the process if it terminates due to an unhandled exception.</summary>
RESTART_NO_CRASH = 1,
/// <summary>Do not restart the process if it terminates due to the application not responding.</summary>
RESTART_NO_HANG = 2,
/// <summary>Do not restart the process if it terminates due to the installation of an update.</summary>
RESTART_NO_PATCH = 4,
/// <summary>Do not restart the process if the computer is restarted as the result of an update.</summary>
RESTART_NO_REBOOT = 8
}
#endregion Restart Manager Enums
}
}