代码之家  ›  专栏  ›  技术社区  ›  beef2k

从wix中的路径中删除尾随斜杠

  •  9
  • beef2k  · 技术社区  · 15 年前

    我正在使用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中有没有一种方法可以去掉尾随斜杠?

    我想的一个解决方案是简单地添加一个 . “然而,在这条路的尽头,这似乎在我的场景中不起作用:(..

    4 回复  |  直到 8 年前
        1
  •  2
  •   Shay Erlichmen    15 年前

    你总是可以这样做:

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

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

        2
  •  4
  •   Ostati    8 年前

    您不应该在自定义操作中使用脚本,但是如果您可以限制到只有几行,并且只限于像本例这样简单的操作,那么您应该可以……

    <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>
    
        3
  •  2
  •   saschabeaumont    15 年前

    在WindowsInstaller中,唯一真正拥有的字符串操作是格式化数据类型的操作。见 MSDN 更多信息。

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

        4
  •  1
  •   tsellon    15 年前

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