Wix:如何指定安装前检测

时间:2013-06-14 07:52:01

标签: windows wix

我正在阅读wix的教程和手册,并试图找出如何应用安装前检测,比如检测机器上是否安装了Visual Studio 2012和Update 2.

以下是wix源代码,但我不确定注册表项是否是检测的先决条件。

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:dd="http://schemas.microsoft.com/wix/2005/01/dd">
<!-- Detection keys fragment. -->
<Fragment>
    <!-- TARGETDIR should be set by a type 51 CA to the root installation location for all products. -->
    <DirectoryRef Id="TARGETDIR">
        <!-- Use all variables in the full key path for the auto-generated GUID, 
             including LANG, since [ProductName] is lang-specific. 
        -->
        <Component Id="Detection_Keys_Reg" Guid="$(autoguid.ComponentGuid(Detection_Keys_Reg,$(var.ProductFamily),$(var.ProductEdition),$(var.VSRegVer),$(var.Lang)))">
            <RegistryKey Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\$(var.VSRegVer)\Setup\[ProductName]">
                <RegistryValue Id="Detection_Keys_RegKey_1" Name="InstallSuccess" Type="integer" Value="1" KeyPath="yes" />
                <RegistryValue Id="Detection_Keys_RegKey_2" Name="SrcPath" Type="string" Value="[SourceDir]" />
            </RegistryKey>
        </Component>
    </DirectoryRef>
    <Feature Id="Detection_Keys" Absent="disallow" AllowAdvertise="no" Description="Used to detect product installation" Display="hidden" Level="1" InstallDefault="local" Title="Detection" TypicalDefault="install">
        <ComponentRef Id="Detection_Keys_Reg" />
        <dd:ExtensionData FeatureGuid="67DC7E25-1836-42AA-A0F8-6E85528D6986" InstallDirectory="TARGETDIR" AllowRunFromSource="no" FeatureGFN="DetectionKeys">Detection Keys</dd:ExtensionData>
    </Feature>
</Fragment>

文件夹

中的两个注册表项

“HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 11.0_Config \ Setup \ Microsoft Visual Studio Ultimate 2012 \”

安装VS2012后,

确实存在(但不在HKLM中)。我不明白一些标签(仍在阅读手册)

所以问题是: 这是检测吗? 2.当所需软件不存在时,如何编写一些弹出消息。

您能为此目的提供一些典型的样品吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

1.Registry用于VS / Update Detection的密钥

您可以使用以下注册表进行检测,其值为UpdatedVersion = CurrentBuildNumber = 11.0.60315对于VSUpdate2

注册表项 HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \微软\ DevDiv \ VS \维修\ 12.0 \专业

2.如果您打算搜索VSUpdate2,则需要使用registrysearch标记,这将为您搜索该值。一旦更新了值,您就可以在Managed UX中弹出自定义逻辑

答案 1 :(得分:1)

尝试在Condition元素中使用Product元素。引用条件元素的WiX文档:在Fragment或Product元素下,条件成为LaunchCondition条目。

如果条件失败,安装将中止,显示您希望它显示的消息。

一个非常简单的例子:

  <Condition Message="Minimum 1 GB of RAM required. Aborting installation.">
    <![CDATA[Installed OR PhysicalMemory >= 1024]]>
  </Condition>

如果您想使用注册表项,请使用RegistrySearch元素设置属性,如下所示:

  <Property Id="TEST">
    <RegistrySearch Id="TestRegKey"
                    Root="HKLM"
                    Key="Software\TestKey"
                    Name="Version"
                    Type="raw" />
  </Property>

现在,您可以在Condition的内部文本中使用此属性。