Kami telah menggunakan WiX untuk sementara waktu sekarang, dan meskipun mengeluh tentang kemudahan penggunaan, itu berjalan cukup baik. Yang saya cari adalah saran yang berguna mengenai:
- Menyiapkan proyek WiX (tata letak, referensi, pola file)
- Mengintegrasikan WiX ke dalam solusi, dan membangun / melepaskan proses
- Mengkonfigurasi penginstal untuk penginstalan dan peningkatan baru
- Retasan WiX apa pun yang ingin Anda bagikan
practical, answerable questions based on actual problems that you face
bagian dari FAQ.Jawaban:
Simpan variabel dalam
wxi
file sertakan yang terpisah . Memungkinkan penggunaan ulang, variabel lebih cepat ditemukan dan (jika perlu) memungkinkan manipulasi lebih mudah oleh alat eksternal.Tentukan variabel Platform untuk build x86 dan x64
Simpan lokasi instalasi di registri, memungkinkan peningkatan untuk menemukan lokasi yang benar. Misalnya, jika pengguna menetapkan direktori pemasangan khusus.
Catatan : Guru WiX Rob Mensching telah memposting entri blog yang bagus yang lebih detail dan memperbaiki casing tepi saat properti diatur dari baris perintah.
Contoh menggunakan 1. 2. dan 3.
dan
Pendekatan paling sederhana adalah selalu melakukan peningkatan besar - besaran , karena memungkinkan penginstalan baru dan peningkatan di MSI tunggal. UpgradeCode ditetapkan ke Panduan unik dan tidak akan pernah berubah, kecuali kami tidak ingin meningkatkan produk yang ada.
Catatan : Di WiX 3.5 ada elemen MajorUpgrade baru yang membuat hidup lebih mudah !
Membuat ikon di Tambah / Hapus Program
Pada rilis build, kami versi installer kami, menyalin file msi ke direktori penempatan. Contoh dari ini menggunakan target wixproj dipanggil dari target AfterBuild:
Gunakan panas untuk memanen file dengan wildcard (*) Guid. Berguna jika Anda ingin menggunakan kembali file WXS di beberapa proyek (lihat jawaban saya di beberapa versi dari produk yang sama). Misalnya, file batch ini secara otomatis memanen output RoboHelp.
Ada sedikit yang terjadi,
robocopy
menghapus metadata copy pekerjaan Subversion sebelum panen; yang-dr
referensi direktori root diatur ke lokasi instalasi kita daripada TARGETDIR default;-var
digunakan untuk membuat variabel untuk menentukan direktori sumber (output penyebaran web).Cara mudah untuk memasukkan versi produk dalam judul dialog sambutan dengan menggunakan Strings.wxl untuk pelokalan. (Kredit: saschabeaumont . Ditambahkan sebagai tip yang bagus ini disembunyikan dalam komentar)
Selamatkan diri Anda dari rasa sakit dan ikuti saran Wim Coehen tentang satu komponen per file. Ini juga memungkinkan Anda untuk meninggalkan (atau wild-card
*
) komponen GUID .Rob Mensching memiliki cara yang rapi untuk melacak dengan cepat masalah dalam file log MSI dengan mencari
value 3
. Perhatikan komentar tentang internasionalisasi.Saat menambahkan fitur bersyarat, lebih intuitif untuk mengatur level fitur default ke 0 (dinonaktifkan) dan kemudian mengatur level kondisi ke nilai yang Anda inginkan. Jika Anda mengatur level fitur default> = 1, level kondisi harus 0 untuk menonaktifkannya, artinya logika kondisi harus berlawanan dengan apa yang Anda harapkan, yang dapat membingungkan :)
sumber
Memeriksa apakah IIS diinstal:
Memeriksa apakah Kompatibilitas Metabase IIS 6 diinstal pada Vista +:
sumber
Simpan semua ID di ruang nama yang terpisah
F.
Contoh: F.Documentation, F.Binaries, F.SampleCode.C.
Mis: C.ChmFile, C.ReleaseNotes, C.LicenseFile, C.IniFile, C.RegistryCA.
Ex: CA.LaunchHelp, CA.UpdateReadyDlg, CA.SetPropertyXFi.
Di.
Saya menemukan ini sangat membantu dalam melacak semua berbagai id di semua kategori.
sumber
Pertanyaan yang fantastis. Saya ingin melihat beberapa praktik terbaik ditampilkan.
Saya punya banyak file yang saya distribusikan, jadi saya mengatur proyek saya menjadi beberapa file sumber wxs.
Saya memiliki file sumber level atas yang saya sebut Product.wxs yang pada dasarnya berisi struktur untuk instalasi, tetapi bukan komponen sebenarnya. File ini memiliki beberapa bagian:
Sisa file .wix terdiri dari Fragmen yang berisi ComponentGroups yang direferensikan dalam tag Fitur di Product.wxs. Proyek saya berisi pengelompokan logis yang bagus dari file yang saya distribusikan
Ini tidak sempurna, indra laba-laba OO saya sedikit menggelitik karena fragmen-fragmen harus merujuk nama-nama dalam file Product.wxs (misalnya DirectoryRef) tetapi saya merasa lebih mudah untuk mempertahankan bahwa satu file sumber besar tunggal.
Saya ingin mendengar komentar tentang ini, atau jika ada yang punya tips bagus juga!
sumber
Tambahkan kotak centang ke dialog keluar untuk meluncurkan aplikasi, atau file bantuan.
...
Jika Anda melakukannya dengan cara ini, penampilan "standar" tidak tepat. Kotak centang selalu memiliki latar belakang abu-abu, sementara dialog berwarna putih:
alt teks http://www.dizzymonkeydesign.com/blog/misc/adding-and-customizing-dlgs-in-wix-3/images/exit_dlg_1.gif
Salah satu caranya adalah dengan menentukan ExitDialog kustom Anda sendiri, dengan kotak centang yang terletak berbeda . Ini berfungsi, tetapi sepertinya banyak pekerjaan hanya untuk mengubah warna satu kontrol. Cara lain untuk menyelesaikan hal yang sama adalah memposting proses MSI yang dihasilkan untuk mengubah bidang X, Y di tabel Control untuk kontrol kotak centang tertentu. Kode javascript terlihat seperti ini:
Menjalankan kode ini sebagai skrip baris perintah (menggunakan cscript.exe) setelah MSI dihasilkan (dari light.exe) akan menghasilkan ExitDialog yang terlihat lebih profesional:
alt teks http://www.dizzymonkeydesign.com/blog/misc/adding-and-customizing-dlgs-in-wix-3/images/exit_dlg_2.gif
sumber
WIXUI_EXITDIALOGOPTIONALCHECKBOX
denganWIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed
di dalam<Publish>
Membuat versi Live, Test, Training, ... menggunakan file sumber yang sama.
Singkatnya: Buat UpgradeCode unik untuk setiap pemasang dan secara otomatis tentukan karakter pertama dari masing-masing Panduan untuk setiap pemasang, meninggalkan 31 unik lainnya.
Prasyarat
Asumsi
Struktur Direktori
Proses
Contoh Config.wxi
Contoh Config.Common.wxi
Contoh Components.wxs
Catatan: Sekarang saya sarankan untuk tidak menyertakan atribut Guid dari Component (setara dengan
*
), menggunakan satu file per komponen dan mengatur file sebagai keypath. Ini menghilangkan kebutuhan untuk panggilanModifyComponentsGuids
danRevertComponentsGuids
target yang ditunjukkan di bawah ini. Ini mungkin tidak mungkin untuk semua komponen Anda.Contoh Setup.Live.wixproj
Pikiran terakhir
PEMBARUAN 1: Panduan komponen penghasil otomatis menghapus kebutuhan untuk memanggil tugas FileUpdate jika Anda membuat komponen dengan Guid = "*" untuk setiap file, mengatur file sebagai keypath.
UPDATE 2: Salah satu masalah yang kami hadapi adalah jika Anda tidak membuat komponen Guid's dan pembuatannya gagal, maka file temp perlu dihapus secara manual.UPDATE 3: Menemukan cara untuk menghapus ketergantungan pada svn: eksternal dan pembuatan file sementara. Hal ini membuat proses pembuatan lebih tangguh (dan merupakan pilihan terbaik jika Anda tidak dapat wildcard Panduan Anda) dan kurang rapuh jika ada kegagalan membangun dalam cahaya atau lilin.
UPDATE 4: Dukungan untuk Beberapa Instans menggunakan transformasi instan ada di WiX 3.0+, pasti juga patut dilihat.
sumber
Menggunakan Msi Diagnostic logging untuk mendapatkan Informasi kegagalan yang terperinci
msiexec /i Package.msi /l*v c:\Package.log
Dimana
adalah nama paket Anda dan adalah tempat Anda menginginkan output dari logKode Kesalahan Msi
Wix Intro Video
Oh dan Random Wix intro video yang menampilkan "Mr. WiX" Rob Mensching adalah "gambaran besar konseptual" bermanfaat.
sumber
Gunakan Javascript CustomActions karena sangat mudah
Orang-orang mengatakan bahwa Javascript adalah hal yang salah untuk digunakan untuk MSI CustomActions . Alasan yang diberikan: sulit di-debug, sulit untuk diandalkan. Saya tidak setuju. Tidak sulit untuk debug, tentu tidak lebih sulit daripada C ++. Hanya berbeda. Saya menemukan penulisan CustomActions dalam Javascript menjadi super mudah, jauh lebih mudah daripada menggunakan C ++. Lebih cepat. Dan sama andal.
Hanya ada satu kelemahan: Javascript CustomActions dapat diekstraksi melalui Orca, sedangkan C / C ++ CA akan membutuhkan rekayasa balik. Jika Anda menganggap sihir pemasang Anda sebagai properti intelektual yang dilindungi, Anda harus menghindari skrip.
Jika Anda menggunakan skrip, Anda hanya perlu mulai dengan beberapa struktur. Inilah beberapa untuk Anda mulai.
Kode Javascript "boilerplate" untuk CustomAction:
Lalu, daftarkan tindakan khusus dengan sesuatu seperti ini:
Anda dapat, tentu saja, menyisipkan fungsi Javascript sebanyak yang Anda suka, untuk beberapa tindakan kustom. Salah satu contoh: Saya menggunakan Javascript untuk melakukan kueri WMI pada IIS, untuk mendapatkan daftar situs web yang ada, di mana filter ISAPI dapat diinstal. Daftar ini kemudian digunakan untuk mengisi kotak daftar yang ditampilkan kemudian dalam urutan UI. Semua sangat mudah.
Pada IIS7, tidak ada penyedia WMI untuk IIS, jadi saya menggunakan
shell.Run()
pendekatan untuk memanggil appcmd.exe untuk melakukan pekerjaan. Mudah.Pertanyaan terkait: Tentang Javascript CustomActions
sumber
Peter Tate telah menunjukkan bagaimana Anda dapat mendefinisikan definisi ComponentGroup yang dapat digunakan kembali dalam fragmen wix yang terpisah. Beberapa trik tambahan terkait dengan ini:
Direktori Aliasing
Fragmen grup komponen tidak perlu tahu tentang direktori yang ditentukan oleh produk utama wxs. Di fragmen grup komponen Anda, Anda dapat berbicara tentang folder seperti ini:
Kemudian produk utama dapat alias salah satu direktori (mis. "ProductInstallFolder") seperti ini:
Grafik Ketergantungan
Elemen ComponentGroup dapat berisi elemen anak ComponentGroupRef. Ini bagus jika Anda memiliki kumpulan besar komponen yang dapat digunakan kembali dengan grafik ketergantungan yang kompleks di antara mereka. Anda cukup mengatur ComponentGroup di fragmennya sendiri untuk setiap komponen dan mendeklarasikan dependensi seperti ini:
Jika sekarang Anda mereferensikan grup komponen "B" di pengaturan Anda karena itu adalah ketergantungan langsung dari aplikasi Anda, itu akan secara otomatis menarik grup komponen "A" bahkan jika pembuat aplikasi tidak pernah menyadari bahwa itu adalah ketergantungan dari "B". Ini "hanya berfungsi" selama Anda tidak memiliki dependensi melingkar.
Wixlib dapat digunakan kembali
Gagasan grafik dependensi di atas bekerja paling baik jika Anda mengkompilasi komponen pool-o-reusable-besar ke wixlib yang dapat digunakan kembali dengan lit.exe. Saat membuat pengaturan aplikasi, Anda dapat mereferensikan wixlib ini seperti file wixobj. Linker candle.exe akan secara otomatis menghilangkan setiap fragmen yang tidak "ditarik" oleh file wxs produk utama.
sumber
Saya terkejut tidak ada yang disebutkan menggunakan T4 untuk menghasilkan file WXS selama membangun. Saya belajar tentang ini melalui Henry Lee @ New Age Solutions .
Pada dasarnya, Anda membuat tugas MSBuild khusus untuk mengeksekusi templat T4, dan templat tersebut menghasilkan WXS tepat sebelum proyek Wix dikompilasi. Ini memungkinkan Anda untuk (tergantung pada bagaimana Anda menerapkannya) secara otomatis menyertakan semua output majelis dari mengkompilasi solusi lain (yang berarti bahwa Anda tidak lagi harus mengedit wxs setiap kali Anda menambahkan perakitan baru).
sumber
Menggunakan Heat.exe untuk menghancurkan wajah dan menimbulkan "Epic Pwnage" pada pemasangan besar yang menyakitkan
Memperluas jawaban Si dan Robert-P tentang panas.
Terjemahan: (Menggunakan panas untuk menghindari pengetikan file individual ke dalam proyek dengan tangan dan untuk mengotomatisasi pembuatan untuk proses yang lebih mudah secara keseluruhan.)
WiX 2.0 Heat Syntax merinci
Untuk versi yang lebih baru (tidak semua yang berbeda dari versi yang lebih lama tetapi ada kemungkinan perubahan sintaks yang mengganggu ....) buka direktori Heat is in dari cmd.exe dan ketik saja heat tetapi saya punya contoh di sini untuk bantuan dengan versi yang lebih baru jika diperlukan.
Menambahkan berikut ke Build Event Anda di visual studio 2010.
(Klik kanan Project-> Properties -> Build Events-> Pre-Build Events)
$(WIX)bin\heat.exe" dir "$(EnviromentVariable)" -cg GroupVariable -gg -scom -sreg -sfrag - srd -dr INSTALLLOCATION -var env.LogicPath -out "$(FragmentDir)\FileName.wxs
Menghasilkan Panduan ketika panas dijalankan (seperti ketika Anda menjalankan perintah di atas)
Jangan ambil "file COM"
Jangan ambil "File Registry"
Jangan ambil "Fragmen"
Jangan ambil "root Dir"
dir menunjukkan Anda ingin Panas melihat dalam folder
Nama variabel yang akan Anda tambahkan ke variabel Preprocessor di (proyek Klik kanan, Pergi ke properti) properti proyek-> bagian Build di mana ia mengatakan Tentukan variabel preprocessor (mengasumsikan visual studio 2010)
Tidak ada tanda kutip ganda tetapi diakhiri dengan tanda titik komaComponentGroup yang akan direferensikan dari fragmen yang dibuat ke file wxs utama
Direktori fragmen tempat fragmen wxs output akan disimpan
Nama file
Tutorial lengkapnya di sini, So freakin bermanfaat
Bagian 1 Bagian 2
sumber
Termasuk Objek COM:
heat
menghasilkan sebagian besar (jika tidak semua) entri registri dan konfigurasi lain yang diperlukan untuk mereka. Bersuka cita!Termasuk Objek COM yang Dikelola (alias, objek .NET atau C # COM)
Menggunakan
heat
pada objek COM yang dikelola akan memberi Anda dokumen wix yang hampir lengkap.Jika Anda tidak memerlukan pustaka yang tersedia di GAC (yaitu, tersedia secara global: PALING saat Anda tidak memerlukan ini dengan rakitan .NET Anda - Anda mungkin telah melakukan kesalahan pada titik ini jika tidak dimaksudkan untuk menjadi perpustakaan bersama) Anda akan ingin memastikan untuk memperbarui
CodeBase
kunci registri yang akan ditetapkan[#ComponentName]
. Jika Anda berencana menginstalnya ke GAC (mis., Anda telah membuat beberapa perpustakaan umum baru yang mengagumkan yang semua orang ingin gunakan), Anda harus menghapus entri ini, dan menambahkan dua atribut baru keFile
elemen:Assembly
andKeyPath
. Majelis harus diatur ke ".net" danKeyPath
harus diatur ke "ya".Namun, beberapa lingkungan (terutama apa pun dengan memori yang dikelola seperti bahasa scripting) akan memerlukan akses ke Typelib juga. Pastikan untuk menjalankan
heat
typelib Anda dan sertakan.heat
akan menghasilkan semua kunci registri yang diperlukan. Betapa kerennya itu?sumber
Menginstal ke
C:\ProductName
Beberapa aplikasi perlu diinstal ke
C:\ProductName
atau sesuatu yang serupa, tetapi 99,9% (jika tidak 100%) dari contoh di instal bersihC:\Program Files\CompanyName\ProductName
.Kode berikut dapat digunakan untuk mengatur
TARGETDIR
properti ke rootC:
drive (diambil dari daftar pengguna WiX ):CATATAN: Secara default,
TARGETDIR
tidak mengarah keC:\
! Ini lebih mengarah keROOTDRIVE
mana pada gilirannya menunjuk ke root drive dengan ruang paling bebas ( lihat di sini ) - dan ini belum tentuC:
drive. Mungkin ada hard drive, partisi, atau USB drive lain!Kemudian, di suatu tempat di bawah
<Product ...>
tag Anda, Anda memerlukan tag direktori berikut seperti biasa:sumber
WindowsVolume
?WindowsVolume
properti tidak dapat digunakan sebagaiDirectory
(kompiler memberikan kesalahan / peringatan), seperti yang ditunjukkan di sini dan di sini . Secara pribadi, saya menemukan solusi yang membingungkan.Variabel Lingkungan
Saat mengkompilasi dokumen Wxs Anda ke kode wixobj, Anda dapat menggunakan variabel lingkungan untuk menentukan berbagai informasi. Misalnya, katakanlah Anda ingin mengubah file mana yang disertakan dalam proyek. Katakanlah Anda memiliki variabel lingkungan bernama RELEASE_MODE, yang Anda atur tepat sebelum Anda membangun MSI Anda (baik dengan skrip atau secara manual, itu tidak masalah) Di sumber wix Anda, Anda dapat melakukan sesuatu seperti:
dan kemudian dalam kode Anda, gunakan di tempat untuk dengan cepat mengubah dokumen wxs Anda, misalnya:
sumber
Menggunakan RobM khusus "Ingat Properti" pattern
http://robmensching.com/blog/posts/2010/5/2/The-WiX-toolsets-Remember-Property-pattern
sumber
Membuat Tindakan Kustom untuk WIX ditulis dalam kode terkelola (C #) tanpa Votive
http://www.codeproject.com/KB/install/wixcustomaction.aspx
sumber
Mengedit Dialog
Satu kemampuan yang baik untuk mengedit dialog adalah menggunakan SharpDevelop dalam versi 4.0.1.7090 (atau lebih tinggi). Dengan bantuan alat ini, dialog mandiri (file wxs dari sumber WiX seperti misalnya InstallDirDlg.wxs) dapat dibuka, dipratinjau, dan diedit dalam tampilan Desain.
sumber
Mengatur flag IIS enable32BitAppOnWin64 http://trycatchfail.com/blog/post/WiX-Snippet-change-enable32BitAppOnWin64.aspx
sumber
Ubah "Siap menginstal?" dialog (alias VerifyReadyDlg) untuk memberikan ringkasan pilihan yang dibuat.
Ini terlihat seperti ini:
alt text http://i46.tinypic.com/s4th7t.jpg
Lakukan ini dengan Javascript CustomAction:
Kode Javascript:
Deklarasikan Javascript CA:
Pasang CA ke tombol. Dalam contoh ini, CA dipecat ketika Berikutnya diklik dari CustomizeDlg:
Pertanyaan SO Terkait: Bagaimana saya bisa mengatur, saat runtime, teks yang akan ditampilkan di VerifyReadyDlg?
sumber
Masukkan Komponen yang dapat ditambal secara terpisah di dalam Fragmen mereka sendiri
Ini berlaku untuk membuat installer produk dan tambalan bahwa jika Anda memasukkan komponen apa pun dalam sebuah fragmen, Anda harus memasukkan semua komponen dalam fragmen itu. Dalam hal membangun penginstal, jika Anda melewatkan referensi komponen, Anda akan mendapatkan kesalahan penautan dari light.exe. Namun, saat Anda membuat tambalan, jika Anda menyertakan referensi komponen tunggal dalam sebuah fragmen, maka semua komponen yang diubah dari fragmen itu akan muncul di tambalan Anda.
seperti ini:
alih-alih ini:
Juga, ketika menambal menggunakan topik "Menggunakan Murni WiX" dari file bantuan WiX.chm, menggunakan prosedur ini untuk menghasilkan tambalan:
tidak cukup hanya memiliki versi 1.1 dari product.wixpdb yang dibangun menggunakan komponen dalam fragmen yang terpisah. Jadi pastikan untuk memecah-mecah produk Anda dengan benar sebelum pengiriman.
sumber
Mencetak EULA dari Wix3.0 dan yang lebih baru
1) Ketika Anda mengkompilasi kode sumber wix Anda, light.exe harus mereferensikan WixUIExtension.dll di baris perintah. Gunakan saklar baris perintah -ext untuk ini.
2) Jika ketika Anda menambahkan referensi ke WixUIExtension.dll, proyek Anda gagal dikompilasi, ini kemungkinan besar karena perselisihan ID Dialog, yaitu proyek Anda menggunakan ID dialog yang sama dengan beberapa dialog standar di WixUIExtension.dll, berikan ID yang berbeda untuk dialog Anda. Ini masalah yang cukup umum.
3) Dialog lisensi Anda harus memiliki kontrol ScrollableText dengan id "LicenseText". Wix mencari persis nama kontrol ini ketika mencetak.
dan Tombol Tekan yang mengacu pada tindakan kustom
4) Tentukan CustomAction dengan Id = "PrintEula" seperti ini:
Catatan: BinaryKey berbeda di Wix3.0 dibandingkan dengan Wix2.0 dan harus persis "WixUIWixca" (case sensitif).
Ketika pengguna menekan tombol dia akan disajikan dengan Select Dialog Printer standar dan akan dapat mencetak dari sana.
sumber
Kami menampilkan versi produk di suatu tempat (kecil) di layar pertama GUI. Karena orang cenderung melakukan kesalahan dalam memilih versi yang tepat setiap saat. (Dan buat kami pengembang mencari usia ..)
Kami telah menyiapkan TFSBuild untuk juga menghasilkan transformasi (file .mst) dengan konfigurasi untuk lingkungan kami yang berbeda. (Kami tahu semua lingkungan tempat kami perlu menerapkan).
Karena posting weblog asli oleh Grant Holliday sedang down, saya salin isinya di sini:
Tugas MSBuild untuk menghasilkan file MSI Transform dari XMLMarch 11 2008
Dalam posting saya sebelumnya saya menjelaskan bagaimana Anda dapat menggunakan file MSI Transform (* .mst) untuk memisahkan pengaturan konfigurasi khusus lingkungan dari paket MSI umum.
Meskipun ini memberikan tingkat fleksibilitas dalam konfigurasi Anda, ada dua sisi bawah dari file Transform:
Untungnya kita dapat menggunakan Perpustakaan Objek Pemasang Microsoft Windows (c: windowssystem32msi.dll) untuk membuka "database" MSI dan membuat file transformasi.
Kredit kembali ke Alex Shevchuk - Dari MSI ke WiX - Bagian 7 - Menyesuaikan instalasi menggunakan Transforms untuk menunjukkan kepada kita bagaimana mencapainya dengan VbScript. Pada dasarnya semua yang saya lakukan adalah mengambil contoh Alex dan menggunakan Interop.WindowsInstaller.dll Saya sudah mengimplementasikan tugas MSBuild. Tugas MSBuild
Unduh kode sumber & contoh transforms.xml di sini (~ 7Kb Zip Solusi VS2008)
sumber
Sebelum menggunakan paket instal, saya selalu mengontrol kontennya.
Itu hanya panggilan sederhana di baris perintah (sesuai dengan posting Terrences) buka baris perintah dan masukkan
Ini akan mengekstrak konten paket ke subdir 'Ekstrak' dengan jalur saat ini.
sumber
Alih-alih ORCA menggunakan InstEd yang merupakan alat yang baik untuk melihat tabel MSI. Juga memiliki kemampuan untuk membedakan dua paket dengan Transform -> Compare To ...
Selain itu versi Plus dengan fungsionalitas tambahan tersedia. Tetapi juga versi gratisnya menawarkan alternatif yang baik untuk Orca.
sumber
Mendaftarkan majelis .NET untuk COM Interop dengan kompatibilitas x86 / x64
NB Fragmen ini pada dasarnya sama dengan REGASM Assembly.dll / basis kode
Beberapa hal sedang terjadi dalam sampel ini jadi inilah kodenya dan saya akan menjelaskannya setelah itu ...
Jika Anda bertanya-tanya, ini sebenarnya untuk Driver Teleskop ASCOM .
Pertama, saya mengambil saran dari atas dan membuat beberapa variabel platforma dalam file terpisah, Anda dapat melihat mereka yang tersebar melalui XML.
Bagian if-then-else di dekat penawaran teratas dengan kompatibilitas x86 vs x64. Perakitan saya menargetkan 'Any CPU' jadi pada sistem x64, saya harus mendaftarkannya dua kali, sekali di registri 64-bit dan sekali di area 32-bit
Wow6432Node
. If-then-else mengatur saya untuk ini, nilai-nilai digunakan dalam aforeach
loop nanti. Dengan cara ini, saya hanya perlu menulis kunci registri sekali (prinsip KERING).Elemen file menentukan dll perakitan yang sebenarnya sedang diinstal dan terdaftar:
Tidak ada yang revolusioner, tetapi perhatikan
Assembly=".net"
- atribut ini saja akan menyebabkan perakitan dimasukkan ke GAC, yang BUKAN apa yang saya inginkan. MenggunakanAssemblyApplication
atribut untuk menunjuk kembali ke dirinya sendiri hanyalah cara menghentikan Wix menempatkan file ke GAC. Sekarang Wix tahu itu adalah .net assembly, meskipun, itu memungkinkan saya menggunakan variabel pengikat tertentu dalam XML saya, seperti!(bind.assemblyFullname.filDriverAssembly)
untuk mendapatkan nama lengkap perakitan.sumber
Tetapkan
DISABLEADVTSHORTCUTS
properti untuk memaksa semua pintasan yang diiklankan di pemasang Anda menjadi pintasan biasa, dan Anda tidak perlu menyertakan kunci reg dummy untuk digunakan sebagai keypath.Saya pikir Windows Installer 4.0 atau lebih tinggi adalah persyaratan .
sumber
Ini struktur yang bagus tapi berdasarkan pengalaman saya, saya ingin tahu bagaimana Anda mengatasi kondisi ini:
A. Semua instal Anda tampaknya mendarat di tujuan yang sama. Jika pengguna perlu menginstal semua 3 versi sekaligus, proses Anda akan memungkinkan ini. Bisakah mereka dengan jelas mengatakan versi mana dari setiap executable yang mereka picu?
B. Bagaimana Anda menangani file baru yang ada di TEST dan / atau PELATIHAN tetapi belum di LIVE?
sumber
Ini dia cara untuk membantu proyek web besar memverifikasi bahwa jumlah file yang digunakan cocok dengan jumlah file yang dibangun ke dalam MSI (atau menggabungkan modul). Saya baru saja menjalankan tugas MSBuild khusus terhadap aplikasi utama kami (masih dalam pengembangan) dan mengambil beberapa file yang hilang, sebagian besar gambar, tetapi beberapa file javascript telah lolos!
Pendekatan ini (mengintip ke dalam tabel File MSI dengan menghubungkan ke target AfterBuild proyek WiX) dapat bekerja untuk tipe aplikasi lain di mana Anda memiliki akses ke daftar lengkap file yang diharapkan.
sumber
Melakukan penginstalan paksa saat penginstalan tidak memungkinkan penghapusan atau penginstalan ulang dan tidak dibatalkan.
Skrip VBscript digunakan untuk mengganti instalasi yang tidak menghapus instalasi untuk alasan apa pun ..
sumber
Buat UI yang memiliki tindakan kustom yang akan mengatur variabel dan UI akan menonaktifkan / mengaktifkan tombol berikutnya (atau serupa) berdasarkan variabel yang ditetapkan dalam tindakan kustom.
Tidak semudah yang Anda kira, tidak terlalu sulit tidak didokumentasikan di mana pun!
Interaksi Wix dengan Ketentuan, Properti & Tindakan Kustom
sumber