我正在使用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中是否有办法摆脱尾随斜线?
我想到的一个解决方案只是在路径的末尾添加“.
”,但是,这似乎在我的场景中不起作用:( ..
答案 0 :(得分:5)
你不应该在自定义操作中使用脚本,但是如果你可以将其限制为只有几行,并且只是像这个例子一样简单,那么你应该没事......
<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>
答案 1 :(得分:3)
Windows Installer中唯一的字符串操作是对格式化数据类型的操作。有关详细信息,请参阅MSDN。
Windows Installer按设计提供了一个尾随目录分隔符,因此除了自定义操作之外,没有任何方法可以将其删除。我建议你为你正在开发插件的源代码包的开发者提出一个错误,如果你遇到这个错误,那么其他开发人员也可能也是。
答案 2 :(得分: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>
并且不允许用户更改最终文件夹
答案 3 :(得分:1)
据我所知,Windows Installer本身不提供任何字符串操作,因此需要自定义操作。