2016-07-05 8 views
1

私は自分自身のインストーラUIを書き込むブートストラップを書きました。それはWPFフロントエンドを持っています。私は3つのMSIのpacakgesとEXEが含まれています。だから十分なスペースがないディスクにインストールしようとすると、インストーラのUIにエラーメッセージダイアログを表示するにはどうすればいいですか?十分なディスク容量がある場合に私が見つけることができるコールバックがありますか?ご意見をお聞かせください。ディスク・スペースを表示するには、ブート・ストラップ・アプリケーションで十分なメッセージがありませんか?

答えて

2

私は同じことをしています。

秘密は、BootstrapperApplicationData.xmlを読み取り、解析することです。 次に、WixPackageProperties要素のInstalledSize属性を使用できます。このリンクGetting Display Name from PackageIDは、実行時にそのファイルを読む方法を示しています。 InstalledSizeを関連する構造体に追加する必要があることに注意してください。

これらの数字の合計と比較してディスク容量を確認し、インストール前にユーザーに知らせる必要があります。

これは私のコードの一部のコピー/ペーストである:で、このXMLに位置しています

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

ちょっとメイト、?私は自分のbin/releaseディレクトリの中で見つけられません – mayooran

+0

loadメソッドはそれを見つけます。実行中のアセンブリからXMLをロードします。 burn .exeが実行されると、一時フォルダにGUIDを持つサブフォルダが作成されます。そのフォルダの中に、「.ba」という追加のフォルダが作成されます。そのフォルダにC#ライブラリがあります。ブートストラップの設定、サポートするファイルの束、BootstrapperApplicationData.xmlファイルがあります。これは上記のコードでロードしています。 – intinit

関連する問題