2009-06-03 66 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