2009-06-03 19 views
7

Estoy usando WiX para instalar un complemento para un software que no estoy controlando. Para instalar el plugin, tengo que poner la carpeta de destino en una clave del registro:Eliminar barra inclinada de las rutas en 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> 

Después de la instalación, la clave de registro HKCU\Software\ACME\Plugins\FooBar\InstallDir contendrá la ruta de destino de la instalación, pero con un trailing "\". Desafortunadamente, por alguna extraña razón, la aplicación host (la que proporciona la arquitectura del complemento) falla debido a eso. Si no hay una barra final, ¡todo funciona bien!

¿Hay alguna manera en WiX para deshacerse de la barra al final?

Una solución que estaba pensando es simplemente agregar un "." al final del camino, sin embargo, esto no parece funcionar en mi escenario .. :(

+1

Añadiendo un '.' ayudado en mi caso particular, así que conseguí sin una CA. ¡Gracias! –

Respuesta

2

siempre se puede hacer algo como esto:

<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> 

y no permiten al usuario cambiar la carpeta final

+0

Sí, ¡eso es cierto! Debido a que la aplicación de alojamiento también tiene problemas con barras diagonales dobles, elimino la que está delante de "Complemento de Foobar" y debería estar bien ... ¡Gracias! – beef2k

1

Por lo que yo sé, Windows Installer no proporciona ninguna manipulación de cadenas de forma nativa, por lo que esto va a requerir una acción personalizada.

1

la única manipulación de cadenas que realmente tiene en Windows Installer es la manipulación de los tipos de datos formateados. Ver MSDN para más información.

Windows Installer proporciona un separador de directorio final por diseño, por lo que no hay ninguna forma de eliminar esto aparte de una acción personalizada. Sugiero presentar un error con los desarrolladores del paquete fuente para el que está desarrollando un complemento, si encuentra este error, es probable que otros desarrolladores también lo estén.

4

No se debe utilizar scripts en acciones personalizadas, pero si se puede limitar hasta unas pocas líneas y algo tan simple como este ejemplo, debería estar bien ...

<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> 
+0

Agradable y simple. Guardado mi tocino ¡Gracias! – Nikhil

Cuestiones relacionadas