2016-07-05 8 views
1

Ich schrieb meine eigene Installer-Benutzeroberfläche mit Burn Bootstrapper. Es hat ein WPF-Frontend. Ich habe eine EXE mit 3 MSI Pacakges enthalten. Also, wenn ich versuche, es auf einem Datenträger mit nicht genügend Speicherplatz zu installieren, wie kann ich ein Dialogfeld Fehlermeldung in meiner Installer-Benutzeroberfläche anzeigen? Gibt es einen Callback, mit dem ich herausfinden kann, ob genügend Speicherplatz vorhanden ist? Bitte um Rat.Wie zeigt man nicht genügend Speicherplatz in Bootstrapper-Anwendungen an?

Antwort

2

Ich bin dabei, das gleiche zu tun.

Das Geheimnis ist das Lesen und Parsen der BootstrapperApplicationData.xml. Sie können dann das InstalledSize-Attribut aus dem WixPackageProperties-Element verwenden. Dieser Link Getting Display Name from PackageID zeigt Ihnen, wie Sie diese Datei zur Laufzeit lesen. Beachten Sie, dass Sie die InstalledSize der entsprechenden Struktur hinzufügen müssen.

Es liegt an Ihnen, den Speicherplatz im Vergleich zur Summe dieser Nummern zu überprüfen und dies dem Benutzer vor der Installation mitzuteilen.

Dies ist eine copy/paste des einige meines 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 Kumpel, wo diese XML an ist? Ich finde es nicht in meinem bin/Release-Verzeichnis – mayooran

+0

Die Lade-Methode findet es. Es lädt den XML-Code aus den ausführenden Assemblies. Wenn die Datei .exe ausgeführt wird, wird ein Unterordner in Ihrem temporären Ordner mit einer GUID erstellt. In diesem Ordner erstellt er einen zusätzlichen Ordner mit dem Namen ".ba". In diesem Ordner finden Sie Ihre C# -Bibliothek. die bootstrapper-config, eine Reihe von unterstützenden Dateien und die BootstrapperApplicationData.xml-Datei, die ich in den obigen Code geladen habe. – intinit

Verwandte Themen