Lewati MSI jika sudah terinstal

Saya memiliki penginstal WIX tempat saya menginstal program saya dan .NET Core 1.0.5. .NET Core diinstal dalam mode senyap:

<ExePackage InstallCommand="/q" Id = "DotNetCore.Setup" SourceFile="..\DotNetCore\DotNetCore.exe" />

Pada sistem yang bersih, penginstal berjalan dengan baik. Jika saya mencoba menginstalnya kembali, saya mendapatkan reboot. Mungkin penginstal .NET terdeteksi sudah diinstal dan memicu fitur perbaikan sendiri. Apakah ada cara untuk melewati instalasi .NET Core jika sudah diinstal?

Saya mencoba mencari parameter baris perintah tetapi sepertinya tidak ada yang berguna


person Gianluca Ghettini    schedule 24.07.2017    source sumber


Jawaban (2)


Elemen ExePackage memiliki properti DetectCondition. Ini berarti Anda dapat menentukan suatu kondisi sehingga, jika kondisi bernilai salah, paket akan diinstal. Anda dapat menggabungkannya dengan elemen util:RegistrySearch yang dapat digunakan untuk mencari melalui registri untuk mendeteksi apakah .NET Core telah diinstal.

Untuk melakukan pencarian registri, pertama-tama Anda harus menemukan kunci registri yang ada setiap kali .NET diinstal.

Temukan kunci "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\", (atau "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\" pada mesin 64-bit) di registri Anda, lalu temukan subkuncinya yang sesuai dengan .NET Core - kunci ini harus memiliki nilai untuk "DisplayName" yang seharusnya ".NET Core" atau yang serupa.

Kunci yang benar, setelah ditemukan, harus memiliki nama yang merupakan rangkaian karakter hex - ini adalah salah satu GUID yang sesuai dengan program .NET Core. Anda kemudian dapat menggunakan kode berikut untuk memungkinkan penginstal mencari keberadaan kunci ini:

<util:RegistrySearch Id="VCRedistTest32" Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{YOUR_GUID_HERE}" Result="exists" Variable="DOTNETPresent" Win64="no"/>

(Gunakan Win64="yes" sebagai gantinya untuk registri 64-bit)

Anda kemudian dapat menggunakan yang berikut ini untuk ExePackage:

<ExePackage InstallCommand="/q" Id = "DotNetCore.Setup" SourceFile="..\DotNetCore\DotNetCore.exe" DetectCondition="DOTNETPresent"/>

Jangan lupa untuk menambahkan referensi ekstensi util ke elemen wix tingkat atas:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
 xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
person Calum MacLeod    schedule 24.07.2017

Anda perlu menggunakan atribut DetectCondition dan pencarian registri yang menetapkan properti jika .net Core diinstal.

Elemen ExePackage - DetectCondition

"Suatu kondisi yang menentukan apakah paket ada pada sistem target. Kondisi ini dapat menggunakan variabel bawaan dan variabel yang dikembalikan melalui pencarian. Kondisi ini diperlukan karena Windows tidak menyediakan metode untuk mendeteksi keberadaan ExePackage. Bakar menggunakan kondisi ini untuk menentukan cara memperlakukan paket ini selama tindakan bundel; misalnya, jika kondisi ini salah atau dihilangkan dan bundel sedang diinstal, Burn akan menginstal paket ini."

person Arkady Sitnitsky    schedule 24.07.2017
comment
ah terima kasih banyak! apakah Anda dapat memberikan kondisi untuk menentukan apakah inti .net diinstal? Saya bahkan dapat menghindari kondisi deteksi jika saya dapat memaksa instalasi daripada instalasi - person Gianluca Ghettini; 24.07.2017
comment
Anda perlu memeriksa registri setelah instalasi. Contoh lengkapnya bisa kamu cek di sini firegiant.com/wix/tutorial/ net-and-net/bootstrapping - person Arkady Sitnitsky; 24.07.2017