2009-06-03 8 views
7

Ich verwende WiX, um ein Plugin für eine Software zu installieren, die ich nicht kontrolliere. Um das Plugin zu installieren, ich habe den Zielordner in einem Registrierungsschlüssel setzen:Entfernen Sie den Schrägstrich von Pfaden in 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> 

Nach der Installation der Registrierungsschlüssel HKCU\Software\ACME\Plugins\FooBar\InstallDir wird die Installation Zielpfad enthält, aber mit einem Hinter „\“. Leider stürzt aus irgendwelchen seltsamen Gründen die Host-Anwendung (die die Plugin-Architektur bereitstellt) deswegen ab. Wenn es keinen abschließenden Schrägstrich gibt, funktioniert alles gut!

Gibt es einen Weg in WiX, um den abschließenden Schrägstrich loszuwerden?

Eine Lösung, die ich dachte einfach ist das Hinzufügen eines „.“ am Ende des Weges, aber dies scheint nicht in meinem Szenario zu arbeiten :(..

+1

Hinzufügen eines '.' in meinem speziellen Fall geholfen, so dass ich ohne eine CA. Vielen Dank! –

Antwort

2

Sie können immer etwas tun:

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

und erlauben nicht der Benutzer den letzten Ordner zu ändern

+0

Ja, das stimmt! Da die Hosting-Anwendung auch Probleme mit Doppel-Schrägstrichen hat, entferne ich die vor "Foobar Plugin" und es sollte in Ordnung sein .. Danke! – beef2k

1

Soweit ich weiß, Windows Installer bietet keine String-Manipulation nativ, so wird dies geht eine benutzerdefinierte Aktion erfordern.

1

die einzige String-Manipulation Sie wirklich in Windows Installer haben die Manipulation von formatierten Datentypen ist. Siehe MSDN für weitere Informationen.

Windows Installer bietet ein nachstehendes Verzeichnistrennzeichen an Design, so dass es keine Möglichkeit gibt, dies außer einer benutzerdefinierten Aktion zu entfernen. Ich würde vorschlagen, einen Fehler bei den Entwicklern des Quellpakets, für das Sie ein Plugin entwickeln, einzutragen, wenn Sie auf diesen Fehler stoßen, dann wahrscheinlich auch andere Entwickler.

4

Sie keine Skripts in benutzerdefinierten Aktionen verwendet werden sollte, aber wenn Sie beschränken könnten auf nur noch ein paar Zeilen und zu etwas so einfachen wie dieses Beispiel sollten Sie in Ordnung sein ...

<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

Schön und einfach. Sparte meinen Speck. Vielen Dank! – Nikhil

Verwandte Themen