2011-08-15 83 views
1

我正在为可以作为主程序的一部分安装或单独安装的实用程序进行安装。主程序在注册表项中的位置。如果安装了主程序,该实用程序应安装在“Utilities”子目录中。例如D:\ Program Files(x86)\ MainProgram \ Utilities。如果主程序没有安装,那么它应该默认为根驱动器文件夹,例如C:\ Program Files(x86)\ MainProgram \ Utilities。根据条件更改安装位置

安装应该得到注册表项(例如HKLM \ Software \ MainProgram \ Key:“Install_location”)。这将提供一个路径,直到d:\ Program File(x86)\ MainProgram。该实用程序应该直接安装在其子目录中。如果密钥不存在,它应该默认为标准位置。

回答

1

使用C#或某种其他语言从自定义操作中读取注册表值,并检查密钥是否存在,否则可以使用WIX查找是否存在注册表项。

RegistryKey regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"Software\MainProgram\Key"); 

if ((string)Registry.GetValue(regKey, "Install_location", "0") != "0") 
{ 
    session["Somevariable"] = (string)Registry.GetValue(regKey, "Install_location") 
} 

使用WIX

<Property Id="INSTALLLOCATION"> 
     <RegistrySearch Id="INSTALLLOCATION" 
       Name="Install_location" 
       Root="HKLM" 
       Key="Software\MainProgram\Key" 
       Type="raw" /> 
</Property> 

在维克斯会话变量的值的基础上,你可以决定安装位置,并在所需的路径安装该实用程序。

1

阅读MainProgram(主程序)的位置到属性:

<Property Id="MainProgramDir"> 
    <RegistrySearch Id="FindMainProgramDir" 
       Root="HKLM" 
       Key="Software\MainProgram" 
       Name="Install_location" 
       Type="directory" /> 
</Property> 

并设置目录结构的默认行为:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="ProgramFilesFolder"> 
    <Directory Id="MainProgramDir" Name="MainProgram"> 
     <Directory Id="INSTALLDIR" Name="Utilities"/> 
    </Directory> 
    </Directory> 
</Directory> 

目录元素是一样的属性,如果有将被覆盖具有相同Id的财产。如果该属性未设置(因为RegistrySearch失败),那么它将如您在设置的目录结构中定义的那样。

+0

感谢它的工作.... –

+0

想要尝试回答这个问题吗? http://stackoverflow.com/questions/19355537/wix-setting-install-folder-correctly –