Installation 从WiX中的路径中删除尾部斜杠

Installation 从WiX中的路径中删除尾部斜杠,installation,path,wix,Installation,Path,Wix,我正在使用WiX为我无法控制的软件安装插件。要安装插件,我必须将目标文件夹放在注册表项中: <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="LocalAppDataFolder"> <Directory Id="APPROOTFOLDER" Name="Foobar Plugin" /> </Directory> </Directory> ...

我正在使用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中有没有办法去掉尾部斜杠


我想到的一个解决方案是在路径的末尾添加一个“
”,但是,这在我的场景中似乎不起作用:(..

据我所知,Windows Installer不提供任何本机字符串操作,因此这需要自定义操作。

Windows Installer中唯一真正具有的字符串操作是格式化数据类型的操作。有关详细信息,请参阅


Windows Installer在设计上提供了一个拖尾目录分隔符,因此除了自定义操作之外,没有任何方法可以删除它。我建议您向正在为其开发插件的源程序包的开发人员提交一个错误,如果您遇到此错误,那么其他开发人员也可能遇到此错误。

您可以随时执行类似操作这:

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

...

并且不允许用户更改最终文件夹

您不应该在自定义操作中使用脚本,但是如果您可以将脚本限制为仅几行和像本例这样简单的内容,您应该可以

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


是的,这是真的!因为托管应用程序也有双斜杠的问题,我删除了“Foobar插件”前面的一个,它应该很好。谢谢!添加一个
对我的特殊情况很有帮助,所以我没有CA。谢谢!很好,很简单。保存了我的培根。谢谢!