2008-09-30 11 views
6

MSI paketleri oluşturmak için Windows Installer 4.5 yeni özellikleri ve WiX kullanıyorum.Her biri gömülü bir kullanıcı arabirimi kullanarak gömülü bir MSI paketi zinciri oluştur - ortak yayın çubuğu

Başka MSI paketlerinin bir koleksiyonunu bir işlem olarak kurmak için bir MSI zinciri yüklemesi oluşturdum. Her paket yeni Gömülü UI seçeneğini kullanarak UI WPF olabilir. Her şey yolunda bu kadar iyi çalışıyor.

Hedeflerden biri hariç, tüm yüklemeler için ortak bir ilerleme çubuğu görüntülemek olacaktır. Şu anda, zincir yükleyicide bir ilerleme çubuğu var, ancak diğer paketler çalışmaya başlamadan önce bu% 100'e ulaşıyor.

Bir iletiyi okudum, Fun with MsiEmbeddedChainer, istediğim şeyin elde edilebileceğini belirtir. Ama işe yaramayacağım. Biraz daha detaylı açıklamalar ve belki bazı kod örnekleri istiyorum.

+0

WPF UI'yi WIX ile kullanma hakkında herhangi bir bilginiz var mı? Gömülü UI seçeneğini kullanmayı ve herhangi bir örnek bulunamadı. –

cevap

5

Yükleme çubuğunun durumunu, yükleyiciye INSTALLMESSAGE_PROGRESS iletilerini vererek el ile denetleyebilirsiniz. Detaylar burada bulabilirsiniz:

Özellikle

http://msdn.microsoft.com/en-us/library/aa370354.aspx

, durum çubuğunu yönetmek için özel bir eylem gerekir (bu MsiProcessMessage uygun çağrı yapmaya sorumlu olacak budur sana da tavsiye ederiz. alt montajcılar yumurtlamaya için kullanabilirsiniz İşte aklında ne var göstermek için bazı pseudocode geçerli:.

LONG LaunchSubinstallersCA(MSIHANDLE current_installer) 
{ 
    // Initialize the progress bar range and position 
    MsiProcessMessage(current_installer, reset_message); // see MSDN for details 

    for each (subinstaller in list_of_installers) 
    { 
     launch subinstaller; // see MSDN for details 

     // Update the progress bar to reflect most recent changes 
     MsiProcessMessage(current_installer, increment_message); // see MSDN for details 
    } 

    return (result); 
} 

ana aşağı tarafı ilerleme çubuğu biraz dalgalı bir şekilde ilerleyeceğine olan gerçekten isteseydin. Fantezi ve daha pürüzsüz hale getirmek için, bekleyeceğiniz ayrı bir "dinleyici" iş parçacığı başlatabilirsiniz Alt-yükleyiciden, ilerleme çubuğuna daha ince taneli artışlar yapmak için güncellemeler. gibi bir şey:

LONG LaunchSubinstallersCA(MSIHANDLE current_installer) 
{ 
    // Initialize the progress bar range and position 
    MsiProcessMessage(current_installer, reset_message); // see MSDN for details 

    launch_listener_thread(); // launches listener_thread_proc (see below) 

    for each (subinstaller in list_of_installers) 
    { 
     launch subinstaller; // see MSDN for details 
    } 

    tell_listener_thread_to_stop(); 
    optionally_wait_for_listener_thread_to_die(); 

    return (result); 
} 

void listener_thread_proc() 
{ 
    // Loop until told to stop 
    while (!time_for_me_to_stop) 
    { 
     // Listen for update from sub-installer 
     timed_wait_for_update(); // probably required IPC, perhaps a named event? 

     // Only update the progress bar if an update message was actually received 
     if (!timeout) 
     { 
      // Update the progress bar to reflect most recent changes 
      MsiProcessMessage(current_installer, increment_message); // see MSDN for details 
     } 
    } 
} 

Açıkçası her bir alt yükleyici yapılmış ilerlemeye ana yükleyici sinyal edebilmek gerekir, bu nedenle bu potansiyel ürün genelinde daha kapsamlı değişiklikler gerektirecektir. Bu çabaya değer olup olmadığı size kalmış.

İlgili konular