2009-06-03 68 views
7

我正在使用WiX为我不控制的软件安装插件。要安装插件,我必须把目标文件夹中的注册表项:从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中摆脱尾随斜线?

一个解决方案,我想是简单地增加一个“.”在路径的结尾,然而,这似乎不是在我的情况:(上班..

+1

在我的特殊情况下添加`.`帮助,所以我没有一个CA。谢谢! – 2010-03-25 20:00:47

回答

2

你总是可以做这样的事情:

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

,并且不允许用户不应该使用在自定义操作脚本来改变最终文件夹

+0

是的,这是真的!由于主机应用程序也存在双斜杠问题,因此我删除了“Foobar Plugin”前面的那个,它应该没问题。谢谢! – beef2k 2009-06-04 16:34:42

1

据我所知,Windows安装程序不提供任何字符串操作本身,所以这将需要自定义操作。

1

唯一的字符串操作你真的在Windows安装程序格式化的数据类型的操作。有关更多信息,请参见MSDN

Windows安装程序提供了一个尾随目录分隔符设计,所以没有任何方法可以将其从自定义操作中除去。我建议向开发插件的开发者提供一个bug,如果遇到这个错误,那么其他开发者可能也是如此。

4

,但如果你能限制只有几行和这个例子一样简单,你应该是好的...

<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

不错,简单。保存了我的培根。谢谢! – Nikhil 2016-04-09 06:12:12