在你的包,加上下面幾行:
<util:RegistrySearch Id="VCRedistTest64" Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{GUID_HERE}" Result="exists" Variable="VCR64Present" Win64="yes"/>
<util:RegistrySearch Id="VCRedistTest32" Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{GUID_HERE}" Result="exists" Variable="VCR32Present" Win64="no"/>
更換{GUID_HERE}標籤與正確的GUID爲Visual C++ 2013年爲了找到這個,一臺機器上使用Visual C++已經安裝,打開你的註冊表並導航到:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
在這個關鍵會有幾個子項,其中每個子項對應於當前系統安裝的軟件包。找到與Visual C++ 2013相對應的鍵,然後複製鍵名,這是您需要插入到上面的代碼中的GUID。
最後,您Exepackage元素更改爲:
<ExePackage Id="VC2013" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="no" InstallCommand="/q" SourceFile=".\vcredist_x862013.exe" DetectCondition="(VCR32Present OR VCR64Present)/>
這將允許Windows檢測,如果已經安裝了Visual C++,並會阻止你的安裝者重新安裝。
此外,添加以下到頂級「維克斯」標籤:
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
爲什麼這是一個問題嗎?當然,vcredist重新運行時會做正確的事情。 –
我認爲它每次都要重新安裝,這需要花費太多時間進行安裝過程 –