【问题标题】:Remove trailing slash from paths in WiX从 WiX 中的路径中删除尾部斜杠
【发布时间】:2009-06-03 20:47:02
【问题描述】:

我正在使用 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 中有没有办法摆脱斜杠?

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

【问题讨论】:

  • 添加. 对我的特殊情况有所帮助,所以我在没有 CA 的情况下也过得去。谢谢!

标签: installation path wix


【解决方案1】:

您不应该在自定义操作中使用脚本,但如果您可以将其限制为几行并且像这个示例一样简单,那么您应该没问题...

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

【讨论】:

  • 漂亮而简单。救了我的培根。谢谢!
【解决方案2】:

您在 Windows Installer 中真正拥有的唯一字符串操作是格式化数据类型的操作。请参阅MSDN 了解更多信息。

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

【讨论】:

    【解决方案3】:

    你总是可以这样做:

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

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

    【讨论】:

    • 是的,没错!因为托管应用程序也有双斜杠的问题,所以我删除了“Foobar Plugin”前面的那个,它应该没问题..谢谢!
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多