2016-07-05 4 views
1

J'ai écrit ma propre interface d'installation avec Burnstrapper. Il a un frontend WPF. J'ai un EXE avec 3 pacakges MSI inclus. Donc, lorsque j'essaie de l'installer sur un disque avec un espace insuffisant, comment puis-je afficher une boîte de dialogue de message d'erreur dans l'interface utilisateur de mon programme d'installation? Y a-t-il un callback avec lequel je peux trouver s'il y a assez d'espace disque? Veuillez nous conseillerComment faire pour afficher l'espace disque ne suffit pas de message dans les applications de démarrage de graver?

Répondre

2

Je cherche à faire la même chose.

Le secret est de lire et d'analyser le fichier BootstrapperApplicationData.xml. Vous pouvez ensuite utiliser l'attribut InstalledSize de l'élément WixPackageProperties. Ce lien Getting Display Name from PackageID vous montre comment lire ce fichier lors de l'exécution. Notez que vous devrez ajouter dans InstalledSize à la structure appropriée.

Ce sera à vous d'aller vérifier l'espace disque par rapport à la somme de ces nombres et de le signaler à l'utilisateur avant l'installation.

Ceci est un copier/coller de la partie de mon code:

using System.Collections.ObjectModel; 
using System.Xml.Serialization; 

public class PackageInfo 
{ 
    [XmlAttribute("Package")] 
    public string Id { get; set; } 

    [XmlAttribute("DisplayName")] 
    public string DisplayName { get; set; } 

    [XmlAttribute("Description")] 
    public string Description { get; set; } 

    [XmlAttribute("InstalledSize")] 
    public int InstalledSize { get; set; } 

} 

[XmlRoot("BootstrapperApplicationData", IsNullable = false, Namespace = "http://schemas.microsoft.com/wix/2010/BootstrapperApplicationData")] 
public class BundleInfo 
{ 
    [XmlElement("WixPackageProperties")] 
    public Collection<PackageInfo> Packages { get; set; } = new Collection<PackageInfo>(); 
} 

public static class BundleInfoLoader 
{ 
    private static readonly string bootstrapperApplicationData = "BootstrapperApplicationData.xml"; 

    public static BundleInfo Load() 
    { 
     var bundleFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 

     var path = Path.Combine(bundleFolder, bootstrapperApplicationData); 

     var xmlSerializer = new XmlSerializer(typeof(BundleInfo)); 
     BundleInfo result; 
     using (var fileStream = new FileStream(path, FileMode.Open)) 
     { 
      var xmlReader = XmlReader.Create(fileStream); 
      result = (BundleInfo)xmlSerializer.Deserialize(xmlReader); 
     } 

     return result; 
    } 
} 
+0

hey compagnon, où est-ce XML situé à? Je ne le trouve pas dans mon répertoire bin/release – mayooran

+0

La méthode load le trouve. Il chargera le code XML à partir des assemblages exécutant l'emplacement. Lorsque le fichier .exe de gravure s'exécute, il crée un sous-dossier dans votre dossier temporaire avec un GUID. Dans ce dossier, il crée un dossier supplémentaire appelé '.ba'. Dans ce dossier, vous trouverez votre bibliothèque C#. la configuration bootstrapper, un tas de fichiers de support et le fichier BootstrapperApplicationData.xml, qui est ce que je charge dans le code ci-dessus. – intinit