Изменение места установки в зависимости от состояния - PullRequest
1 голос
/ 15 августа 2011

Я делаю инсталлятор для утилиты, которую можно установить как часть основной программы или самостоятельно.Расположение основной программы присутствует в разделе реестра.Если основная программа установлена, утилита должна быть установлена ​​в подкаталоге «Utilities».например, D: \ Program Files (x86) \ MainProgram \ Utilities.Если основная программа не установлена, то по умолчанию она должна быть в корневой папке диска, например, C: \ Program Files (x86) \ MainProgram \ Utilities.

При установке должен получить ключ реестра (например, HKLM \ Software \ MainProgram \).Ключ: "Install_location").Это даст путь до d: \ Program File (x86) \ MainProgram.Утилита должна быть установлена ​​в ее суб-напрямую.Если ключ отсутствует, по умолчанию он должен иметь стандартное расположение.

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Считайте расположение 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), оно будет таким, каким оно было определено в заданной вами структуре каталогов.

1 голос
/ 15 августа 2011

Считайте значение реестра из настраиваемого действия, используя 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>

На основе значения переменной сеанса WIX вы можете выбрать место установки и установить утилиту по нужному пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...