MSI dosyalarını kullanmanın kurumsal yararları


57

.Msi dosyalarını normal setup.exe dosyalarına kullanmanın avantajları nelerdir?

Kullanıcıların az izne sahip olduğu makinelerde konuşlandırmanın daha kolay olduğu, ancak ayrıntılardan emin olmadığı izlenimini edindim.

Msiexec.exe hangi özellikleri, setup.exe senaryolarını kullanmaktan daha kolaylaştırır?

.Msi uygulamalarını dağıtırken herhangi bir ipucu veya püf noktaları?

Yanıtlar:


42

Sadece birkaç fayda:

  • Reklamı yapılabilir (böylece talep üzerine kurulum yapılabilir).
  • Reklam gibi, özellikler kullanmaya çalıştığı anda özellikler yüklenebilir.
  • Durum yönetimi sürdürüldüğü için Windows Installer, yöneticilerin bir uygulamanın makineye yüklenip yüklenmediğini görmelerine olanak sağlayan bir yol sağlar.
  • Bir kurulum başarısız olursa geri alma yeteneği.

Bir kurumsal ortamda yazılımı dağıtırken düşünüyorum: MSI aracılığıyla yazılımı dağıtmak neredeyse keyifli. Buna karşılık, kendimi her zaman başka bir kap içindeyken yazılım dağıtmaktan korkarken buluyorum.

MSI kurulumlarını manipüle etme konusunda bazı ek bilgiler için msiexec, Çalıştır iletişim kutusuna yazın.


3
+1 - Bunu '09'da görmedim (o zamanlar sitenin hala beta sürümünde olabileceğini düşünüyorum), ancak "... neredeyse her zaman kendimi korkuturken buluyorum ..." bitini seviyorum . Ben tamamen böyle hissediyorum (gerçi, adil olmak, bazı "MSI'lar" Beni aynı şekilde hissettirmek ... Java ... Google Chrome ...).
Evan Anderson

74

GÜNCELLEME, Temmuz 2018 : Yığın akışta aşağıdaki bilgilerin son derece sıkıştırılmış bir özeti mevcuttur: MSI'nin Başlıca Faydaları ( "executive summary"- çeşit).


Geliştirme konusunda büyük bir şirkette sürüm yöneticisi , yapım mühendisi , kurulum geliştiricisi ve uygulama paketleyicisi ve dağıtım mühendisi olarak çalıştım .

Bu, MSI'nin en iyi (ve en kötü) kavramsal ve gerçek dünya özelliklerinin bir incelemesidir. MSI dosyalarında bulunan en yaygın tasarım sorunları aşağıda ayrı bir cevap olarak sunulmuştur . Tamamlanmış gibi davranmak değil - gerçekten sadece dağınık bir "beyin dökümü" - "kitaplarda bulunamayan şeyler" olarak düşünülüyordu (muhtemelen iyi bir nedenle).

Ayrıca, bu MSDN makalesini iyi bir okuma olarak önermek istiyorum : Windows Installer: Sistem Yöneticileri için Yararları ve Uygulamaları .


Standardizasyon:

Kısacası, MSI standardizasyon ve eski kurulum teknisyeni teknolojilerinin " dağıtım kokuları " ile ilgilenmekle ilgilidir . Kötü kurulum mimarisi koleksiyonunun tümü, tekrarlanan dağıtım sorunlarına neden olan tasarımları tasarlar.

Genel MSI bir sağlar kapsamlı, standardize edilmiş bir çerçeve yükleyici için en önemlisi de kaldırma içerir ve yerleşik özellikleri ve seçenekleri Sessiz sefer ile standartlaştırılmış GUI edilebilir uzaktan tetiklenen .

Bu özellikler tek başına kaldırma ve sessizce çalışan sessizce işlem gören önceki kurulum teknolojilerinde büyük bir gelişmedir - belki de Active Directory veya Microsoft SCCM (özel olarak SMS)gibi özel uzaktan yönetim araçları ile güvenilir bir uzaktan paket yönetimi ile birlikte kurumsal dağıtım için en önemli özelliklerdir. IBM Tivoli , CA Unicenter ve benzeri.

Birisi bu cevabın önceki bir versiyonunu kopyaladı . Belki daha hızlı bir okuma?


Eski Yükleyiciler "Dağıtım Kokuyor"

MSI, eski konuşlandırma kokularını tasarıma göre aktif olarak engeller . Bu konular daha sonraki bölümlerde ele alınmaktadır, ancak hızlı bir liste olarak, eski yükleyiciler ve daha eski dağıtım teknolojilerinde en çok tanınan konular şunlardı:

  • 1) Bazen indirilen ve üzerine yazılan dll-cehenneme ilişkin kaygı duyulan paylaşılan ve versiyonlanmış dosyaların üzerine yazarlar.
  • 2) genellikle yükleyiciyle birlikte verilen uygun bir kaldırma yordamı yoktu ya da özellikle sessizce çalıştırılırsa düzgün ve güvenilir bir şekilde tamamlanmadı. Kurumsal SOE yönetimi için bu çok büyük bir konudur
  • 3) sessiz kurulum nadiren uygun şekilde desteklenmiştir. Güvenilirlik zayıftı ve sık sık yükleme seçimlerini iletişim kutusu seçimleriyle kaydetmek zorunda kalıyordu ve bu hata hata diyalogları ya da orijinal çalışmada kaydedilmeyen uyarı diyalogları gibi beklenmeyen durumlarla iyi başa çıkmıyordu.
  • 4) yükleyici yüklü olanın kaydını tutmadı ve bu nedenle hala yükleyici tarafından yüklenen sürümlerin olup olmadığını kontrol etmek için diskteki dosyaları doğrulamanın otomatik bir yolu yoktu.
  • 5) çalıştırılabilir kurulum için öngörülemeyen, güvenilmez ve standart olmayan komut satırı parametreleri kullandılar
  • 6) standart olmayan komut satırından ve standartların bulunmamasından sonra, montajcıları kurumsal dağıtım için gereken spesifik değerlerle güvenilir ve öngörülebilir bir şekilde özelleştirmek zordu.
  • 7) normal kullanıcılar bu kurulumları çalıştıramazlardı ve sık sık geçici yönetici haklarıyla uğraşmak zorunda kalıyorlardı (eğer yeterliyse "çalıştır" komutunu kullanın ya da yönetici olarak giriş yapın, kurun ve çıkış yapın - bu tam giriş ve profil oluşturma kurulumun tamamlanması için bazen gerekliydi)
  • 8) setup.exe yükleyici genellikle ediyorum uygun bir hata kodu vermemelidir veya başarı kodu ve bazen hemen çıkmak istiyorum ve bitireceğini başka sürecin vuruşu tamamlanmış yükleme eğer zor belirlemek için yapım yüklemek - özellikle toplu aracılığıyla dosya
  • 9) çoğu setup.exe dosyası, dosyaların çıkarılmasına izin verdi, ancak güvenilir, öngörülebilir bir şekilde değil - genellikle bunu gerçekleştirmek için doğru anahtarları bulmak için çok zaman harcamanız gerekebilir
  • 10) günlüğü genellikle yoksul ve bazı araçlar oldukça gelişigüzel. Günlük dosyaları ile hata ayıklama nadiren netlik üretti, ancak biraz yardımcı oldu
  • 11) yükleyicinin ne yaptığı konusunda hiçbir şeffaflık yoktu ve başarısız bir kurulumdan sonra değişiklikleri geri almak için geri dönüşü olmadı ya da güvenilmez geri dönüş yoktu.
  • 12) oldu hiçbir endüstri standardı yolu arasında paylaşılan çalışma zamanı bileşenleri dağıtma onlar sistem bileşenlerini, üçüncü parti bileşenler veya kendi işletim olup olmadığını

Liste, birçok diğer önemli ve tanınmış dağıtım hatasıyla devam ediyor . Açıkça kurumsal dağıtım dünyasında bu sorunların en sık ortaya çıktığı ve standartlara uygun bir MSI dosyası oluşturmak için eski bir yükleyicinin disk ve kayıt defteri tarama teknolojileriyle yakalandığı " uygulama yeniden paketleme " işiyle sonuçlandı. güvenilir dağıtım için.

Uygulama yeniden paketleme bir olan uzman iş ve genellikle bilgili insanlar tarafından doğru yapılırsa mükemmel kalitede MSI dosyaları sonuçlanır, ancak çalışmak için belirli uygulamalar için etkileşimli çalıştırılmalıdır nedeniyle karmaşık kayıt mantığına tüm uygulamaları yeniden paketlemek için mümkün değildir.


MSI Yararları - Kısa Özet

Gelen sade bir dille MSI gerçekten önemli faydaları (belirli bir sırayla) şunlardır:

  • 1) kaldırma , aktif olarak devre dışı bırakılmadıkça her paket için her zaman kullanılabilir
  • 2) Bu, ayrıntılı olmasına rağmen, büyük ve standart olan loglama için aynıdır (WiLogUtl.exe gibi araçlar log dosyalarını analiz etmek için kullanılabilir)
  • 3) bir MSI dosyasının yaptığı şey (yarı) şeffaf veya çoğu zaman "denetlenebilir" dır. İstisna özel eylemlerdir - (aşağıdaki şeffaflık bölümüne bakın)
  • 4) kurulum özelleştirme standart bir şekilde yapılır ( dönüştürür )
  • 5) kurulum, Active Directory reklamı, grup politikası veya uzaktan yönetim yoluyla yükseltildiği için geçici yönetici haklarıyla uğraşmaya gerek yoktur . Burada bazı nitelikler. Ayrıca grup ilkesi nesnesi editörünün bu ekran görüntüsünü görebilirsiniz .
  • 6) sessiz yükleme / kaldırma yönetim araçları aracılığıyla veya msiexec.exe kullanarak iyi çalışıyor
  • 7) başarısız kurulumlar için tam geri alma desteği var . Kutuya manuel olarak kurarsanız, bilmeniz gereken bazı özellikler vardır .
  • 8) MSI dosyası bir veri tabanı şemasına uyduğundan tutarlılık ve mantıksal geçerliliği için hem incelemeye hem de doğrulamaya kendisini ödünç verir ( bkz. Doğrulama örneği )
  • 9) güncellemeler standartlaştırılmış türlerdir, ancak deneyimsiz paketleyiciler için karmaşık ve sıklıkla hataya açıktırlar
  • 10) dosyaların ekstraksiyon msi dan yerleşik bir özellik (iyi bir göz gezdirme için bağlantılı makale kontrol) 'dir
  • 11) Windows Installer komut satırı, msiexec.exe , kurulum sırasının nasıl yapılması gerektiğine dair çok hassas bir kontrol sunar ve tüm seçenekler, tüm standartlarla uyumlu MSI dosyalarıyla çalışır (günlük düzeyini ayarlayın, sessiz / etkileşimli / yarı-sessiz çalışın) , kurulum parametrelerini ayarlayın, dönüştürmeleri uygulayın ...).
  • 12) birleştirme modülleri , çoklu MSI paketleriyle paylaşılan dosyaları teslim etmek için MSI mekanizmasıdır. Derleme zamanında herhangi bir MSI paketi ile birleştirilebilen, tüketilebilir bir modül veya kurulum mantığı paketidir. Wix, Wix dosyalarının kullanımı ile bu konsepti genişletti ve geliştirdi - bence modülleri birleştirmek için daha üstün bir kavram - özellikle kendi dosyalarınız için (yani OS dosyaları değil)
  • 13) Windows kurulum motorunun kendisi , kurulum sırasında sürümlenmiş veya değiştirilmiş dosyaların üzerine yazılmasını önleyen bir mekanizmaya sahiptir . Bu oldukça karmaşık bir dosya değiştirme mantığı ile kontrol edilir . Etkili ve iyi olsa da, birçok geliştirici, yükseltme yaparken değiştirilmiş yapılandırma dosyalarının üzerine yazamama sorunuyla karşı karşıya kaldığı için, mantık kendi başına bir sorun olabilir. Bu sorunların çözümü, genel yayılma karşıtı kalıpları önlemek için uygulama tasarımında küçük değişiklikler olur - bu, kendi başına büyük bir tartışmadır.

In gerçek dünyada buldum az başarılı yönlerini kapsayacak şekilde yama , (çok karmaşık) MSI-GUI (oldukça karmaşık düz özellikler, esneklik yoksun), esneklik (yol açabilir kendini tamir sorunları tekrar hata ayıklamak zor ve) genel karmaşıklığı Yeni başlayanlar için teknolojiyle ilgilenme (zaman zaman temel işlemlerin yüksek karmaşıklığı - örneğin, yükseltmeler, GUI ve etkileşimli detaylar beklenmedik sonuçlara neden olur…). Kurulum işleminin hızı, MSI’nin ek yükünün artması nedeniyle de önemli ölçüde yavaşladı. MSI kurulum hızını artırmak için bazı ipuçlarına bakın .

Metnin geri kalanı MSI'nin bu yönlerinden bazıları ile daha ayrıntılı olarak ilgilenmektedir.


Şeffaflık (açık yükleyici formatı)

Bir MSI dosyası, temel olarak bir COM yapılı depolama dosyası olarak depolanan soyulmuş bir SQL-Server veritabanıdır - esasen bir dosyadaki bir dosya sistemi veya veri akışları topluluğudur. Bu kullanılan dosya türüdür Microsoft Office dokümanları ve bir verir standart bir biçim edilebilir gözden ve teftiş - bir büyük sorunu büyük şirketler için.

Derlenmiş özel eylemler hariç, bir MSI dosyası beyaz bir kutudur . Kurulum, sistem genelinde ağ ayarları gibi çılgınca bir şey değiştirirse, gerçekte uygun araçları kullanarak görebilirsiniz . Önemli istisna, kara kutu olan özel eylemlerdir . Windows logosu gereksinimleri , ne yaptıklarını açıklamak için özel eylemlerin açıklamasını gerektirir, ancak bu genellikle kurulum geliştiricileri tarafından göz ardı edilir. Umarım Wix'in gelişmesi bunu iyileştirir.

Bu tür bir derlenmiş özel işlemlerin gerçekte teknik anlamda ne yaptığını belirlemek için, bir kurulum yakalama gereklidir. Bu benim deneyimimde neredeyse hiç yapılmıyor. Yazılımın kurumsal dağıtım için onay alması gerekiyorsa, satıcıyla iletişim kurmak daha yaygındır ve ardından yalnızca kurulumu değil, kullanımını engelleyen uygulamanın kendisi de olabilir.

Özelleştirilebilirlik (dönüşümler)

Bir MSI, bir kuruluşun gereksinimlerine ve standartlarına uyacak şekilde dönüşümler yoluyla özelleştirilebilirken, satıcının yükleyici güncelleştirmeleriyle birlikte çalışabilirlik sağlar. Yükleyicinin kendisini değiştirmezsiniz, kişiselleştirmenizi dönüşümü (.mst dosyası) ( ayrı ayrı bir veritabanı parçası veya isterseniz işlemi değiştirir ) adı verilen kuruluşa özgü bir dosyada yaratırsınız . Özel eylemleri devre dışı bırakmakta ve genel olarak değiştirmekte, yükleyicideki herhangi bir şeyi geçersiz kılmakta veya devre dışı bırakmakta özgürsünüz ve dosyalar dahil yeni şeyler bile ekleyebilirsiniz. Dönüştürme dosyaları bazen bir MSI dosyasını farklı dillere yerelleştirmek için de kullanılır. Çeşitli dönüşümler tek MSI uygulanabilir, burada a, örnek ile kesilmiş yolları :

msiexec.exe /I "My.msi" /QN /L*V "C:\My.log" TRANSFORMS="C:\1031.mst;C:\My.mst"

Hızlı Parametre Açıklama:

/QN = run completely silently
/L*V "C:\My.log"= verbose logging
TRANSFORMS="C:\1031.mst;C:\My.mst" = Apply transforms 1031.mst and My.mst.

Yönetim ve raporlama

Windows Installer , bir ürünün kayıt defterine yüklediği tüm öğelerin kapsamlı bir veritabanını tutar ( HKEY_CLASSES_ROOT \ Installer - burada hiçbir şeyi doğrudan değiştirmeyin! Bu uzmanlar için de geçerlidir).

Bir ürünün yüklü olup olmadığını, hangi özelliklerin yüklü olduğunu ve hangi dosya sürümlerinin yüklü olduğunu güvenilir bir şekilde belirleyebilirsiniz. Ek olarak, eğer varsa, temel ürüne uygulanan yamaların bir listesini alabilirsiniz. Microsoft SCCM , IBM Tivoli , CA Unicenter vb. Gibi çeşitli komut dosyası, yapılandırma ve yönetici araçları kullanarak API’nin Win32, COM veya .NET’i destekleyen bu veritabanına erişebilirsiniz .

Güvenlik (geçici yükseltilmiş haklar)

MSI ayrıca, sınırlı bir kullanıcının kurulumu için yönetici hakları gerektiren bir ürünün kurulumunu tetiklemesine izin veren "yüksek haklar" ilkelerini de kapsar . Bu, bir yöneticinin, tüm iş istasyonlarına gerçekte yüklemeden, kullanıcıların yükleyicileri kullanıcılara sunmasını sağlayan " reklamcılık " özelliğinin bir parçasıdır . Yükleyicinin kendisi, bu yükseltilmiş haklar kavramının doğru çalışması için birkaç çekirdek hesapta doğru bir şekilde yazılmalıdır. Kullanıcılar ürünün kurulumunu kendileri tetikleyebilir veya kurulum, SCCM, Tivoli, Unicenter (normalde daha büyük şirketler) gibi özel bir dağıtım sistemi tarafından kontrol edilebilir. İşlerin yürümesi için geçici yönetici haklarıyla uğraşmanıza gerek yok Bu genellikle eski montajcılar için de geçerlidir.

Kapsamlı kurulum veritabanı ayrıca kurulu yamalar hakkında genel bilgi sahibi olmanızı ve dolayısıyla otomasyon ve yönetici araçlarıyla güvenlik açıklarını tespit etmenizi sağlar.

onaylama

MSI dosyaları, bir takım iç tutarlılık kurallarına ( ICE olarak adlandırılır ) uygun olmasını sağlamak için doğrulama kuralları ile kontrol edilebilir.). Şirketler özel kurumsal kural ve gereklilikleri uygulamak için kendi ICE çeklerini oluşturabilirler. Bu, KG ile büyük ölçüde yardımcı olur. Doğrulamanın mümkün olmasının nedeni, ilişkisel veritabanlarının kendi kendine referans niteliği ve ilişkili veritabanı şemasıdır. Veri tabanı, yabancı anahtarlar, veri tipleri, alan genişliği, şema sürümü, vb. Konularında dahili olarak tutarlı ve kendi şemasıyla uyumlu olmalıdır. Doğrulama ayrıca bunun ötesine geçer ve paketteki orijinal mantıksal hataları ve hataları saptayabilir , sadece biçimlendirme değil, kusurları da yazın. Örneğin, hatalı hedef hedeflere dağıtılmakta olan dosyaları veya dosya türlerini algılayabilir.

Esneklik (Kendi kendine onarım)

Yönetici yüklemek , Windows yükleyici özelliği (bir MSI dan kaynak dosyaları ayıklamak için standart bir yol sağlar burada bu konuyla ilgili bazı ek bilgiler ). Bu kaynak dosyalar daha sonra bir paylaşımda bulunabilir ve kurulum için tüm iş istasyonlarında kullanılabilir. Bu, CD veya benzeri bir kurulum ortamı talep etmeden tamamlanmış işlemlerin onarımı, kaldırılması ve değiştirilmesini sağlar. Bu, özel durumlarda eski sürüm kaynak dosyalarına erişim gerektirebilecek işlemleri yamalamak ve güncellemek için özellikle önemlidir.

Bu esneklik özelliği ile ilgili ortak sorunlar da vardır. Çoğu yönetici , hiç durmadığı gibi , döngüsel kendi kendine onarım döngüleri olan makineler deneyimlemiştir . Bu sorunun nedenlerinin uzun bir listesi için linki takip edin. Ve yine, işte okunması daha kolay olabilecek daha kısa bir versiyon .

Geri Alma

Bir MSI dosyasının yüklenmesi normalde bir geri yükleme noktasının oluşturulmasını tetikler . Ayrıca, yükleme sırasında değiştirilen veya üzerine yazılan tüm dosyalar ve kayıt öğeleri, yükleme işlemi tamamlanamazsa, özel eylemlerde yapılan değişiklikleri engellediğinde kaydedilir ve geri yüklenir.

Özel eylemler, Windows logosu uyumluluğu için kendi geri alma desteğini uygulamalıdır. Bu genellikle göz ardı edilir, ancak ana özel eylem tarafından yapılan değişiklikleri geri almak için ikinci bir özel eylem oluşturmayı içerir.

Geri alma, kurulumun başarısız olmasına rağmen iş istasyonunun sabit bir durumda bırakılmasını sağlar. Gerçek geri alma komut bir saklanır gizli klasörde sistem sürücüsünde doğrudan - genellikle C: \ Config.msi ve uzantıları .RBS ve .RBF ile dosyaları içeren - Geri Alma Senaryo Files . Kötü tasarlanmış MSI dosyalarının, Windows'un yerleşik özelliklerini ihlal edebileceğini umduğunuzdan, daha fazla ayrıntı için bu konudaki diğer yazıma bakın.

Geri alma işlemini devre dışı bırakmanın ve kurulumu hızlandırmanın yolları vardır. Genel olarak önerilmez, ancak burada MSIFASTINSTALL özelliği ve DISABLEROLLBACK ile ilgili ayrıntılar bulunmaktadır . Bu karmaşık bir özelliktir, ancak işte hızlı bir geri alma özeti .

Yama ve Güncellemeler

Oldukça karmaşık olsa da, Windows yükleyicideki yama tamamen yönetilir ve sisteme kaydedilir; böylece sistem güvenlik durumu yüklü olanı denetleyerek belirlenebilir. Güncellemeler, birkaç temel değişkene standartlaştırılmıştır ve bu, ilgili karmaşıklığı ele alabilmeniz koşuluyla, güncellemelerin daha yüksek bir kesinlikte yapılmasını sağlar. Dağıtım sistemleri hangi güncellemelerin başarısız olduğunu ve nedenini rapor edebilecektir.

Sübjektif bir görünümde yama 2 temel kullanım için iyi çalışır : 1 ) teslim edilen ürünler için küçük düzeltmeler ve 2 ) ürünlerin temiz kaldırılmasını önleyen hatalı kaldırma sırasını düzeltmek için kurulu bir ürünü yamalama.

Bir düzeltme eki, zaten çalışmakta olan bir güncelleştirme için yalnızca bir teslim mekanizmasıdır . Gibi sadece orijinal kurulum kendisinden daha karmaşık ve hata eğilimli bir kapsayıcıdır . Bir düzeltme ekinin bir numaralı kuralı , orijinal MSI'dan daha küçük olması gerektiği veya bir düzeltme eki vermek için açık bir neden olmaması gerektiğidir. Bir yama, birden fazla ürün versiyonunu hedefliyorsa hızla büyüyebilir.

Günlük (gerçekten ayrıntılı)

Windows Installer, neredeyse aşırı ayrıntılı olsa da, önceki enkarnasyonlardan oldukça üstün olan standart bir kayıt özelliği sunar . Günlük dosyaları günlük analizörleri kullanılarak deşifre edilebilir ve gereksiz bilgi içeren çok büyük günlük dosyalarının oluşturulmasını önlemek için özel günlük seviyeleri kullanılabilir. Hata ayıklama amacıyla ayrıntılı günlük kaydı son derece yararlıdır. Bir MSI günlük dosyasını okumanın iyi bir yolunu bulmak için Rob Mensching'in bloguna bakın (temel olarak günlük dosyasında " değer 3 " ü arayın ). Ayrıntılı günlük kaydı yapan örnek bir komut satırı:

msiexec.exe /I "C:\Installer.msi" /QN /L*V "C:\msilog.log"

Bu makalesinde, Robert Macdonald gelen Windows Yükleyici Ekibi : Çok MSI günlük bir pratik bakış olarak önerilmektedir nasıl Windows Installer Günlükleri'ni yorumlama .


Sonuç

Windows Installer hakkında her şey iyi değil . Onun karmaşıklığı baffling olabilir zamanlarda, ancak dikkate Yukarıdaki avantajların listesini alırken büyük şirketler için MSI dosyaları büyük ölçüde dağıtım diğer herhangi bir şekilde üstündür.

Yeni yükleyici paradigması (büyük SQL ifadesi)

Yeni " paradigmayı " anlamak için, MSI'nin sabit bir olaylar dizisinden ziyade hedef sistemde neler olacağını açıklayıcı bir açıklama olarak tasarladığını anlamak önemlidir . Sanırım bunu büyük bir SQL ifadesi olarak düşünebilirsiniz . Örneğin, bir INI dosyasına eklenmesini veya değiştirilmesini istediğiniz öğeleri beyan ediyorsunuz. Kurulum devam ederken değişiklikler izlenir ve kurulum başarısız olursa değişikliklerin geri alınabilmesi için geri alma kullanılabilir. Bu gerçekten " automagic " gibi çalışır ve doğru yapıldığında güvenilirdir.

Özel Eylemler (olağan şüpheliler)

Bu bir olan dev baş ağrısı için deneyimli MSI geliştiriciler insanlar kompleksi güvenmek görmek için, daha iyi ile uygulanan işlevsellik için güvenilmez özel eylemler yerleşik MSI özellikleri. Tüm MSI hatalarının ve geri alma sorunlarının önemli bir kısmına hatalı özel eylemler neden olur ve diğer çoğu hata MSI tasarımının hatalı kullanımından kaynaklanır (ortak MSI hatalarının listesi için ayrı cevaba bakınız).

Yerleşik MSI özelliklerine ek olarak, Wix - MSI dosyalarını derlemenin XML yolu gibi yeni çerçeveler sayesinde giderek daha fazla özel işlevsellik mevcuttur , bu nedenle çoğu işlem için karmaşık özel eylem mantığına daha az ve daha az ihtiyaç vardır.

MSI , ini dosya ayarlarının, yazı tiplerinin, ortam değişkenlerinin, kayıt defteri anahtarlarının, COM bilgilerinin, kısayolların, dosya uzantılarının, başlatma koşullarının, GAC kurulumunun, ODBC'nin ...

WIX desteği ile ileri gider çok gelişmiş özellikleri , bu tür bir SQL sunucusu uzantıları olarak yüklemelerini ve yapılandırmayı, performans sayaçlarını, DirectX denetleme ve diğer oyun ilgili görevleri IIS, .NET yerel görüntü oluşturma, COM +, sürücüler, güvenlik duvarı kuralları, PowerShell uzantıları, uygulama kapanış, kullanıcıların, grupların, hisse senetlerinin ve çok daha fazlasının yönetimi. Başa çıkmak için bir miktar müdahil olmakla birlikte, kendi özel eylemlerinizden çok daha güvenilir.

Mümkünse Özel Maliyetlerden Her Ne Kadar Maliyetle Korunmalı

Perspektifi ortaya koymaya çalışmak için: bu yerleşik ve hazır çözümler mevcut en iyi dağıtım uzmanları tarafından yapılır ve binlerce, on binlerce veya belki de milyonlarca kullanıcı tarafından test edilir (MSI'deki yerleşik ürünler için) kendisi) bulunur. Gerçekten kendi özel eylemlerinizi yaparak daha iyisini yapabileceğinizi düşünüyor musunuz? Özel bir işlem kullanmak nadir bir olay olmalı ve yüklediğiniz ürün için benzersiz bir şey elde etmek için mutlaka gerekli olmalıdır . Ayrıca, tamamen ilgili olan geri alma desteğini de yazmalısınız.

Özel bir eylem yazmak neredeyse her zaman bir hatadır , ancak gerçekten de esnekliğe ihtiyaç duyduğunuzda gerçek durumlar vardır. Her zaman olduğu gibi, savaşlarınızı iyi seçmek önemlidir. İlk başta eğlenceli bir görev olabilir, ancak beklenmeyen birçok sorunla karşı karşıya kalacaksınız ve çok fazla zaman harcayacaksınız. Bunu çok ciddiye demek istiyorum. Kurumsal kullanım için kendime bir C ++ özel eylem paketi yazdım (hataya açık VBScript özel eylemlerini ortadan kaldırmak için) - parkta yürüyüş yok ve kodlama dünyada en zor olmasa da, hata ayıklama ve test ve Gerçek bir MSI dosyasına bağlanma, son derece ilgili olanlardan başka bir şey değildir. Hangi hazır seçeneklerin kullanılabilir olduğunu araştıran bir süre, haftalarca süren geliştirme çalışmalarından tasarruf etmenizi ve çok daha fazla dağıtım güvenilirliği sağlar.

Uygulama Başlatma Sırasını Kullan

Çok önemli bir nokta, öngörülebilir bir çalışma zamanı içeriğine ve iyi bir hata işlemeye sahip olduğunuzda ve uygulamada yalnızca bir kez çalıştırılan ve çok karmaşık kimliğe bürünme , sıralama , koşullandırma ve çalışma zamanı özelliklerine sahip olan kurulumda olmadığınızda uygulama başlatma sırasında çok fazla uygulama yapılandırması yapılması gerektiğidir. karmaşıklık .

Kurulumunuz uygulamayı yapılandırmamalı, ilk çalıştırmada uygulamayı yapılandırmaya hazırlamalıdır . Özellikle kurulumunuz, yükseltilmiş haklar gerektiren tüm ayarları yazmalıdır - HKLM'ye yazma, hizmetleri kaydetme, makine başına yollara yükleme ve bir uygulamanın normal kullanıcı haklarıyla tek başına yazamayacağı şeyler.

Bir kurulum geliştiricisiyseniz, özel kurulum eylemleri yazmak yerine uygulama başlatma sırasını kodlamayı dahil etmeyi teklif etmelisiniz . Başka bir şey olmazsa, sizin gibi görünmekten kaçınmak için bir başkasına "parayı" iletmeye çalışıyorsunuz. Bu lansman sırasında QA personelinin test etmesi için yardım alması daha kolay olan çok daha güvenilir ve test edilebilir bir kod yazabilirsiniz (genellikle uygulama testlerinin yanı sıra uygulama testlerini de anlamıyorlar).

Kurulum karmaşıklığı

Kurulum karmaşıklığının özü, hataların kümülatif olduğu (sadece hızlı bir yeniden derleme değil, bir teslimat işlemini yönetiyorsunuz), hataların hata ayıklanması çok zor (hataların meydana geldiği sistemlere erişim yok) ve hedef sisteme odaklanır. devletler, hayal edilebilecek hemen hemen her yönden farklılık gösterir . Lütfen bu karmaşıklık ve hedef sistemlerin şok edici bir şekilde nasıl temkinli olabileceği hakkında daha ayrıntılı bir tartışma için bu cevaba bakınız: Windows Installer ve WiX oluşturulması ve Dağıtım Karmaşıklığı (aşağıya bakınız).

WiX (bazı amaçlar için en iyi MSI çözümü)

MSI dosyalarını derlemenin yeni XML tabanlı yolunun açıklaması için bu WiX hızlı tanıtımını okuyun . Metin tabanlı kaynak dosyaları, öncekinden çok daha iyi kaynak kontrolü sağlar. Bu, şiddetle tavsiye edilen ücretsiz, açık kaynaklı bir araç takımıdır .

Not : MSI dosyalarındaki genel tasarım problemlerinin hızlıca gözden geçirilmesi için, iş parçacığının başka bir yerine bakın - bu çok eksik ama bir okumaya değer olmalı. Bunu% 100 ilgili olmadığı için bu cevaba eklemek istemedim, ama gerçek dünya kullanımı için bu çok önemli bir konudur.


Sys-adminleri için bazı temel MSI bilgileri:

(utanmaz "terfi" affet - kolay erişim ve erişim için)

Aşağıda, ağlarındaki dağıtımı denetleme çabalarında sistem yöneticilerine yardımcı olabilecek konulara birkaç bağlantı verilmiştir:

Özel nasıl yapılır konuları:

Kavramsal Konular / En İyi Uygulama:


24

Bu cevap, devam eden bir çalışma ve kaba bir taslaktır. İlaveler, sorular ve güncellemeler hoş geldiniz. Bu liste her şeyi içermiyor. Sorunlu paketler hakkında bilgi içeren bir yorum ekleyin.


MSI Paketlerinde Görülen Tipik Problemler ve Tasarım Kusurları

Ayrıca, MSI dosyalarının birçoğunun hatalar, bazen ciddi olanlar içerdiği konusunda uyarmalıyım, ancak eğitimli uygulama paketleyicileri bunu tespit edebilecek ve çoğu durumda sorunu ortadan kaldıracak. Bunu ayrı bir cevap olarak ekliyorum çünkü temelde farklı bir soruyu yanıtlıyor, ancak aynı konu ile ilgili olduğunu düşünüyorum.

MSI'da yer alan teknik detaylar çok karmaşık . Temel düzeyde, dosyalarınızı ve kayıt defteri ayarlarınızı bileşenlere (atomik yükleme) ve özelliklere (örneğin, bir sözlük özelliği yüklemek üzere kullanıcı tarafından seçilebilir uygulama parçaları) ayrıştırma hakkındadır. Bileşenleri ayırmak için en iyi uygulama kuralı vardır ve MSI dosyalarındaki hatalar çoktur. Bu hatalar genellikle "büyük yükseltmeler" kullanımı konusunda standartlaştırılarak ele alınmaktadır.

Gerçek kurulum, bazıları yüksek haklara sahip, birkaç kurulum dizisinde gerçekleştirilir . Bunların hepsi veritabanı tablolarında tanımlanmıştır ve bu, MSI'nin anlaşılması ve ilgilenmesi için oldukça karmaşık olduğu yerdir. Kurulum dizileri boyunca yayılmış standart ve özel eylemlerdir. Standart eylemler Microsoft tarafından tasarlanmıştır ve gerçekleşmesi gerekir (sıra bazen değiştirilebilir). MSI’nin kapsamına girmeyen özel mantıkları gerçekleştirmek için satıcılara özel işlemler uygulanır. Bunlar komut dosyası veya derlenmiş biçimde olabilir. Özel eylemler hemen gerçekleştirilebilir (bir kerede çalıştırılır, sistemi değiştirmemelidir, ancak sık sık değişmez) veya ertelenebilir (daha sonra bir işlem olarak yürütülen bir istisna betiğine yazılır ve dolayısıyla geri dönüşü destekler).

Bir MSI'daki tipik hatalar (belirli bir sırayla - ve gerçek bir karışıklık olarak sunulur):

  • bileşen oluşturma hataları (en iyi uygulamayı takip etmeden). Bu, eksik dosyalar ve ayarlar veya saçma sapan hatalarla bombalanan yamalar gibi gizemli belirtilerle düzeltme ve yükseltme işlemlerinde sorunlara neden olabilir. Basitleştirmek için, dosya sayısı çok fazla olmadığı sürece her bileşen için bir dosya kullanmalısınız.
  • kullanıcı verilerinin üzerine yazma veya sıfırlama ile ilgili sorunları yükseltme . Aşağıdaki daha fazla ayrıntıya bakın.
  • kurulum dizilerinin "işlem gören bölümünün" dışındaki özel eylemlerin yanlış programlanması veya yanlış tipteki özel işlemlerin yanlış yerleştirilmesi. Bu genellikle, dağıtım sistemleri üzerinden uzaktan çalıştırıldığında eylemlerin başarısız olmasına (yüksek hak yok) neden olur ve yalnızca işlem yapılan eylemler geri alındığı için geri alma etkili bir şekilde sakatlanır. Windows Installer İşlemi (veritabanı işleminin başarılı olduğunu düşünüyorum) ana kurulum sırasındaki InstallInitialize ve InstallFinalize standart işlemleri arasında çalışır ve yüksek haklarla çalışır . Sistemdeki tüm değişiklikler bu işlemde yapılacak - başka bir şey yanlış (ama ne yazık ki oldukça yaygın).
  • işlem yapılan yükleme sırası dışındaki sistemde değişiklik yapmak için acil mod özel eylemlerinin kullanılması . Bu, geri alma desteğini keser ve genellikle güvenlik hatalarını tetikler; çünkü acil durum modu özel eylemleri, yükleme sıralarında nereye yerleştirildiklerine bakılmaksızın yüksek kullanıcı haklarıyla çalışmaz.
  • Net bir sebep olmadan tekrarlayan kendi kendini onarma döngülerine neden olan hatalı tasarımlar . İşte bu konuda başka bir makale, installsite.org
  • katılımsız yükleme modunda GUI'nin baskılanmasına uymayan özel eylemler , sessizce çalışırken dağıtımın tamamen başarısız olmasına neden olan kalıcı iletişim kutularını gösterebilir. Sessiz mod ve etkileşimli mod arasındaki genel farkla birlikte bu sorun burada daha ayrıntılı olarak açıklanmıştır (biraz ayrıntılı ve uzun sargılı): Denetim Masası'ndan Kaldırma, Kaldır .msi'den farklıdır
  • hatalı yazılmış paketlerdeki bazı özel eylemler yalnızca kullanıcı arayüzü sırasına eklenir . Bu, sessiz yükleme modunda çalıştırılmamasına neden olur. Sessiz kurulum neredeyse tamamen kullanıldığından, kurumsal dağıtım için bu çok ciddi bir durum. Bu sorun ayrıca, tüm temizleme özel eylemlerinin çalışmasını sağlamak için kaldırma işlemini etkileşimli olarak çalıştırmak zorunda kalabileceğiniz kaldırma anlamını da etkileyebilir. Yine, kullanıcı arayüzü seviyelerinin daha uzun bir açıklaması için önceki madde işaretindeki linke bakınız.
  • kurulum, yüklendikleri konumda dağıtılması amaçlanmayan dosyalar içeriyor. Genellikle, winsxs birleştirme klasöründe yan yana yüklenmesi gereken sistem dosyaları.
  • Yavaş kurulum hızı , MSI ile ilgili birçok raporun bildirdiği başka bir "problem". İşte konuyla ilgili bazı ipuçları . Genel olarak, Windows Installer, kayıt defterinde yüklü olanlar için yapılan yoğun kayıt gereklilikleri nedeniyle bir miktar ek yük içermektedir.
  • özelleştirilmiş bilgilerin veya paylaşılan veri dosyalarının üzerine yazma . Bu, örneğin bir INI dosyası, örneğin IniFile tablosu değil, Dosya tablosu aracılığıyla yüklüyse gerçekleşebilir. İkinci durumda, önceki durumda bir "değişiklik işlemi" gibi ele alınır, bu bir dosya değiştirme işlemidir; INI dosyanız standart olmayan biçimlendirme veya dosyanızla birlikte dağıtılmasını istediğiniz büyük yorumlar bölümleri içermiyorsa (genellikle bazı geliştirici araçları).
  • dosya üzerine yazma için karmaşık kurallar dosyaları hiç güncellenen istemeden üzerine, ya da değil neden olabilir - bu klasik MSI konudur. Yükseltilmeyecek bir dosyanın üzerine yazmaya nasıl zorlayabileceğiniz için bu makaleyi inceleyin . Kurallar , msiexec.exe komut satırı düzeyinde ayarlanan REINSTALLMODE özelliği için özel ayarlarla hafifçe değiştirilebilir (eski sürümlerin üzerine yaz, eşit sürümlerin üzerine yaz, herhangi bir sürümün üzerine yaz ...) ve veri dosyaları ve sürüm dosyaları için farklı çalışırlar. SDK'daki ayrıntılar . Bunun anlaşılması kritik öneme sahiptir ve anlaşıldığında bile üzerine kaşlarını çattıran bir tasarımdır.
  • Kurulum sırasında COM dosyalarının kendi kendine kaydedilmesi güvenlik uyarılarını tetikleyebilir veya çeşitli şekillerde sorunlara neden olabilir. Bu makaleyi inceleyin: Kendi kendine kayıt zararlı olduğunu düşünüyor .
  • dosya değiştirme konusundaki bir değişiklik, büyük bir yükseltme işleminin (ürünü kaldırır ve yeniden yükler) değiştirilmiş dosyaları kaldırması ve varsayılan sürümleri yeniden yüklemesi durumudur . Bu durumlarda , içerik ilk olarak kaldırıldıktan ve yeniden yüklendikten sonra , içerik geri alınmış veya üzerine yazılmış gibi görünür .
  • Özel kullanıcı kimlik bilgileriyle çalışan hizmetler , büyük yükseltme senaryoları sırasında kimlik bilgilerini kaybedebilir ve ayrıca ayarlar dosyasının (göründüğü gibi) varsayılan ayarlara (gerçekten kaldırıldı ve yeniden yüklendi) geri dönebilir. Sadece kayıt için: Bence kullanıcı kimlik bilgileri ile çalışan hizmetler ilk etapta bir tasarım hatası.
  • Genel özellikler , istemciden sunucu işlemine düzgün bir şekilde iletilmez ve özel eylemlerin beklendiği gibi tamamlanmasını önler. Bu, SecureCustomActionProperties özelliğinin güncellenmesini içerir.
  • Bazı uygulamalar kurulumu orijinal olarak yükleyenlerden başka kullanıcılar için düzgün şekilde çalışamıyor. Bu ciddi bir tasarım hatasıdır, ancak genellikle HKCU kayıt defteri anahtarlarını ve userprofile dosyalarını eklemek için kendini iyileştirme veya ActiveSetup kullanan deneyimli uygulama paketleyicileri tarafından giderilebilir . Bu oldukça karmaşık bir konudur ve çalışmak için biraz siyah sanat gerektirebilir. Kayıt için: asıl çözüm, bence, varsayılan ayarlara ve makine başına bir yerden kopyalanan şablonlara veya uygulama dahili varsayılanlarına göre kullanıcı başına tüm ayarları başlatacak şekilde uygulamanın kendisini değiştirmektir. kaynak kodu).
  • Bazı MSI dosyaları , burada, orada ve her yerde yönetici olmayanlar için tam okuma / yazma haklarını ayarlayarak yüklü dosyalar için güvenliği ortadan kaldırır . Diğer durumlarda uygulama, izinlerin bulunmaması nedeniyle daha yeni Windows sürümlerinde çalışmayı durdurur. Uygulama paketleyicileri, bir uygulamanın özel izin gereksinimlerinin oldukça sık analiz edilmesiyle karşı karşıyadır. Genelde HKLM'de veya% ProgramFiles% içindeki bir yerde bazı ek izinler gerekir.
  • Bazı Installshield kurulumları gün içinde tekrar kurulurken yükleme sırasında İnternete bağlanmaya çalışır. Dağıtımın sıkı bir şekilde kontrol edildiği kurumsal dağıtım senaryoları için korkunç bir durumdur ve yükleyicinin Internet'ten doğrudan yeni içerik indirmesine hiçbir zaman izin verilmeyecektir.
  • Başka bir ağ oluşturma sorunu, kurulumlar insanların yüklendikleri sırada İnternet üzerinden doğrulanan verileri girdikleri bir GUI göstermeye veya yalnızca web sitelerinden canlı içerik göstermeye çalıştıkları zamandır. Bu genellikle e-posta adresleri, iletişim bilgileri, lisans anahtarları ve benzeri şeylerdir. Şirket ortamlarındaki eksik proxy yapılandırması nedeniyle bağlantı birçok nedenden dolayı tamamen başarısız olabilir (İnternete doğrudan bağlantı yoktur, tüm İnternet trafiği belirli bir önbellek sunucusundan yönlendirilir ve her işlem güvenlik duvarından geçmek için kimlik bilgileri sağlaması gerekir) . Kurulum yoluyla lisansları onaylamanın tehlikeleri hakkında bir makale .
  • Installshript , Installscript dili için bir çalışma zamanı yüklemek için kullanılır . Bu önkoşullu kurulum genellikle setup.exe dosyasına eklenmiştir ve efsanevi bir sorun kaynağı olmuştur . Pek çok sürüm, birkaç uyumsuzluk ve bir dizi çalışma zamanı hatası meydana geldi. Sürüm 12'den (veya bu sürümlerden beri) bu çalışma zamanı artık güvenilir bir şekilde kurulmuş ve ya yerel ya da çalışan sanal alanı derliyor (hangisinin, hangisinin diğerinin - muhtemelen sanal alanın) güvenilir bir şekilde olduğundan emin değilim. Daha eski olan Installshield ayarları bu dağıtım sorununu yine de gösterebilir. Bunlar gibi durumlar için Installshield'ten eski bir destek sitesi var: http://consumer.installshield.com/common.asp
  • Birkaç kurulum, İngilizce'den farklı diller için ayarlanmış makinelerde çalışırken veya İngilizce makinelerde kurulumların yerelleştirilmiş (çevrilmiş) versiyonlarını çalıştırdığınızda bile hatalı kurulum davranışları veya aralıklı hatalar gösterebilir . Bu tamamen çalışma zamanı hatası olabilir veya yerelleştirilmiş iletişim kutularının metin veya hatalı biçimlendirme veya hatalı çeviri veya dil yerelleştirmeyle ilgili diğer birçok hata türünü kestiği durumlar olabilir.- tek başına bütün bir uzmanlık alanı (resimlerdeki metni çevirmek, yazılımı çevirmek, pazarlama malzemesini çevirmek, uluslararası destek talepleri ile ilgilenmek, işletim sistemindeki dil ayarlarına uyum sağlamak vb.). Bazı dillerin, dil özelliklerinin hesaba katılması için değiştirilen tüm uygulamanın gereksinimi vardır - tipik sorunlar, dize makroları ve kod sayfası ayarlarıdır; ikincisi, Unicode'un tanıtımıyla ilgili daha az sorun olur. Bir çeviri aracından örnek ekran görüntüsüne bakın .
  • Neredeyse tüm kurulumlar , MSI paketlerinin kalitesini test etmek için kullanılabilen yerleşik doğrulama testlerinden birkaçında başarısız olur . Pratik bir doğrulama örneği için bu makaleye bakın .
  • Bazen , MSI'nin sürüm numarasının yalnızca 3 basamağının büyük tarama taramaları sırasında gerçekten kontrol edilmesi nedeniyle bir MSI için başarısız oluyor .
  • INI dosyalarının yüklenmesi, Windows Installer'ın yerleşik bir özelliğidir. Girişler istenen şekilde eklenebilir, kaldırılabilir, birleştirilebilir veya dağıtılabilir. Ancak, INI dosyalarının bölümlenmiş değerler yerine bir dosya olarak yüklenmesi oldukça yaygındır. Bu, INI dosyasının yeniden yükleme sırasında güncelleştirilmek yerine üzerine yazılmasına neden olabilir. Çok yaygın bir MSI problemi.
  • Yukarıdaki sorun, .NET uygulamasının ve Config.xml dosyalarının durumu için de geçerlidir. Bu durumda, MSI, içeriği ayrıntılı bir şekilde güncellemek için yerleşik bir yönteme sahip değildir ve güncellemeyi özel bir işlemle kodlamanız veya yükleme sırasında tüm dosyayı değiştirmeniz gerekir. Wix'in bunun için yeni özellikleri olabilir, ancak Windows Installer altyapısında bu yerleşik bir sistem yoktur.

Bazı daha ince hatalar ve unutmuş olacağım daha büyük, tipik problemler var.

Check Windows Installer İyi Uygulama Makaleyi MSDN .


5

MSI'leri kullanmak ayrıca yama yapmayı (MSP dosyaları) ve yükseltmeleri kolaylaştırır. MSI, tüm süreci kolaylaştıran benzersiz Ürün ve Yükseltme kodları kavramını kullanır.

Bazı dağıtım sistemleri (CA Unicenter Software Delivery bir örnektir) MSI'leri özel bir şekilde anlayabilir, böylece dağıtım sistemine çok daha iyi entegre olmalarını sağlar. Örneğin, bir MSI'yi dağıtım sisteminin yazılım kitaplığına besleyebilirsiniz; ürün içindeki çeşitli özellikleri otomatik olarak algılar ve çok daha ayrıntılı özel işlemlere (Yerel Kurulum, Doğrulama, Onarım vb.) Ve günlüğe kaydetmeye otomatik olarak izin verir.

Kendi kendine iyileşme / onarım da MSI'lar için büyük bir artıdır.


2

Ayrıca, "kaynak kodundan Windows kurulum paketleri oluşturan bir araç seti olan açık kaynak Windows Installer XML " e de göz atın. Araç seti, geliştiricilerin MSI ve MSM kurulum paketlerini oluşturmak için derleme işlemlerine entegre edebilecekleri bir komut satırı ortamını destekler. " Bu, MS tarafından birçok temel yazılım paketini hazırlamak için kullanılır.


0

dönüşümleri yapabilirsiniz - teoride çok özelleştirebilirsiniz, programın satıcı tarafından doğru bir şekilde paketlenmiş olması durumunda, son kullanıcı ile herhangi bir etkileşim olmadan tam otomatik dağıtım yapabilirsiniz - pencerelerinizin ortamını standartlaştırmak istediğinizde ve daha sonra çok daha azına sahip olduğunuzda çok yararlıdır Bilgisayarların

İnsanların msis [veya katılımsız dağıtım] ile ne yaptığını görmek için bu siteyi ve forumlarını ziyaret edin .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.