Удалить косую черту из путей в WiX - PullRequest
9 голосов
/ 04 июня 2009

Я использую WiX для установки плагина для программного обеспечения, которое я не контролирую. Чтобы установить плагин, я должен поместить целевую папку в раздел реестра:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="LocalAppDataFolder">
    <Directory Id="APPROOTFOLDER" Name="Foobar Plugin" />
  </Directory>
</Directory>

...

<DirectoryRef Id="APPROOTFOLDER">
  <Component Id="register" Guid="240C21CC-D53B-45A7-94BD-6833CF1568BE">
    <RegistryKey Root="HKCU" Key="Software\ACME\Plugins\FooBar">
      <RegistryValue Name="InstallDir" Value="[APPROOTFOLDER]" Type="string"/>
    </RegistryKey>
  </RegistryKey>
</DirectoryRef>

После установки раздел реестра HKCU\Software\ACME\Plugins\FooBar\InstallDir будет содержать целевой путь установки, но с завершающим знаком "\". К сожалению, по некоторым странным причинам хост-приложение (предоставляет архитектуру плагина) из-за этого падает. Если косой черты нет, все работает отлично!

Есть ли в WiX способ избавиться от косой черты?

Одним из решений, о котором я думал, является просто добавление «.» в конце пути, однако в моем сценарии это не работает :( ..

Ответы [ 4 ]

5 голосов
/ 09 апреля 2014

Вы не должны использовать скрипты в пользовательских действиях, но если бы вы могли ограничиться несколькими строками и чем-то простым, как в этом примере, вы должны быть в порядке ...

<CustomAction Id="VBScriptCommand" Script="vbscript">
  <![CDATA[         
    value = Session.Property("INSTALLFOLDER")

    If Right(value, 1) = "\" Then
      value = Left(value, Len(value) - 1) 
    End If

    Session.Property("SOME_PROPERTY") = value      
  ]]>
</CustomAction>

<InstallExecuteSequence>
  <Custom Action="VBScriptCommand" After="CostFinalize">NOT REMOVE</Custom>
</InstallExecuteSequence>
3 голосов
/ 04 июня 2009

Единственная строковая манипуляция, которую вы действительно имеете в установщике Windows, - это манипулирование форматированными типами данных. См. MSDN для получения дополнительной информации.

Установщик Windows обеспечивает замыкающий разделитель каталогов, так что нет никакого способа удалить это, кроме настраиваемого действия. Я бы посоветовал сообщить об ошибке разработчикам исходного пакета, для которого вы разрабатываете плагин. Если вы столкнулись с этой ошибкой, то, вероятно, другие разработчики также.

2 голосов
/ 04 июня 2009

Вы всегда можете сделать что-то вроде этого:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="LocalAppDataFolder">
    <Directory Id="APPROOTFOLDER" Name="Foobar Plugin" />
  </Directory>
</Directory>

...

<DirectoryRef Id="APPROOTFOLDER">
  <Component Id="register" Guid="240C21CC-D53B-45A7-94BD-6833CF1568BE">
    <RegistryKey Root="HKCU" Key="Software\ACME\Plugins\FooBar">
      <RegistryValue Name="InstallDir" Value="[LocalAppDataFolder]\Foobar Plugin" Type="string"/>
    </RegistryKey>
  </RegistryKey>
</DirectoryRef>

И не разрешать пользователю изменять конечную папку

1 голос
/ 04 июня 2009

Насколько я знаю, Windows Installer не предоставляет никаких манипуляций со строками, поэтому для этого потребуется специальное действие.

...