2009-06-03 41 views
7

Tôi đang sử dụng WiX để cài đặt plugin cho phần mềm mà tôi không kiểm soát. Để cài đặt plugin, tôi có phải đặt các thư mục đích trong một khóa registry:Xóa dấu gạch chéo ở đường dẫn trong 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> 

Sau khi cài đặt, các khóa registry HKCU\Software\ACME\Plugins\FooBar\InstallDir sẽ chứa đường dẫn mục tiêu lắp đặt, nhưng với một trailing "\". Thật không may, vì một số lý do lạ, ứng dụng máy chủ (cung cấp kiến ​​trúc plugin) bị treo do đó. Nếu không có dấu gạch chéo, mọi thứ đều hoạt động tốt!

Có cách nào trong WiX để loại bỏ dấu gạch chéo không?

Một giải pháp tôi đã nghĩ đến việc chỉ đơn giản là thêm một "." ở cuối của con đường, tuy nhiên, điều này dường như không làm việc trong kịch bản của tôi :(..

+1

Thêm '.' đã giúp trong trường hợp cụ thể của tôi, vì vậy tôi nhận được mà không có CA. Cảm ơn! –

Trả lời

2

Bạn luôn có thể làm điều gì đó như thế này:

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

Và tôi không cho phép người dùng thay đổi thư mục thức

+0

Vâng, đó là sự thật! Bởi vì các ứng dụng lưu trữ cũng có vấn đề với đôi slashes, tôi loại bỏ một ở phía trước của "Plugin Foobar" và nó sẽ được tốt .. Cảm ơn! – beef2k

1

Theo như tôi biết, Windows Installer không cung cấp bất kỳ thao tác chuỗi natively, vì vậy điều này sẽ đòi hỏi một hành động tùy chỉnh.

1

duy nhất chuỗi thao tác bạn thực sự có trong Windows Installer là sự vận động của các kiểu dữ liệu được định dạng. Xem MSDN để biết thêm thông tin.

Trình cài đặt Windows cung cấp dấu phân tách thư mục theo sau thiết kế, vì vậy không có cách nào để loại bỏ điều này ngoài một hành động tùy chỉnh. Tôi muốn đề nghị nộp một lỗi với các nhà phát triển của các gói nguồn bạn đang phát triển một plugin cho, nếu bạn đang gặp phải lỗi này thì các nhà phát triển khác có khả năng là quá.

4

Bạn không nên sử dụng các kịch bản trong hành động tùy chỉnh, nhưng nếu bạn có thể hạn chế chỉ với một vài dòng và một cái gì đó đơn giản như ví dụ này, bạn nên là Ok ...

<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

Đẹp và đơn giản. Đã lưu thịt xông khói của tôi. Cảm ơn! – Nikhil

Các vấn đề liên quan