2009-11-25 35 views
7

Tôi có trình cài đặt WiX cần cài đặt các bit mới cho Interop.FOOBARLib.DLL cho GAC. Vấn đề là số phiên bản giống như phiên bản cũ và các bit mới không được viết GAC khi nâng cấp. Chúng tôi thực thi hành động RemoveExistingProducts sau hành động InstallFinalize.Buộc cài đặt để nâng cấp tệp trong GAC bất kể số phiên bản

Chúng tôi không thể di chuyển hành động RemoveExistingProducts sang phiên bản cũ hơn trong quá trình cài đặt.

Thành phần foobar.dll không phải là thành phần của tôi vì vậy tôi không thể tăng phiên bản thư viện kiểu (điều này sẽ làm cho phiên bản của tương tác tăng lên và tất cả các vấn đề này biến mất).

Có cách nào để FORCE tệp được nâng cấp trong GAC ngay cả khi phiên bản giống nhau không? Tôi muốn hành vi tương tự như “gacutil.exe/f”.

Thành phần trông giống như:

<Component Id="Interop.FOOBARLib.dll" Guid="{4E0C173E-34DF-4249-A3A6-5530047FA65B}" > 
    <File Id="Interop. FOOBARLib.dll" Name="Interop.FOOBARLib.dll" KeyPath="yes" Assembly=".net"/> 
</Component> 

Trả lời

1

Bạn có thể tạo các Interop Assembly cho mình và buộc nó để có được một phiên bản cao hơn như thế này:

tlbimp /asmversion:1.2.3 /out:Interop.FOOBARLib.DLL foobar.dll 
+0

Đây là cách tôi giải quyết nó. Cũng yêu cầu tham số/sysarray. – Mike

-1

Bạn có thể thử để thực hiện một hành động tùy chỉnh để xóa các tập tin, ngay trước khi các thành phần được cài đặt. Đó là not recommended to use vbscript for custom actions nhưng ví dụ bên dưới vẫn nên minh họa ý tưởng.

<CustomAction Id="ForceRemove" Script="vbscript" Execute="deferred"> 
    <![CDATA[ 
    Dim fso 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    fso.DeleteFile("c:\somefile.dll") 
    ]]> 
</CustomAction> 

<InstallExecuteSequence> 
    <Custom Action='ForceRemove' Before='InstallFiles'/> 
</InstallExecuteSequence> 
8

gì bạn đang cố gắng để làm được gọi là một bản cập nhật In-Nơi một hội thông qua vào GAC. Để làm việc này cả hai thư viện Interop.FOOBARLib.dll phải có cùng phiên bản lắp ráp, nhưng dll mới hơn phải có phiên bản tệp cao hơn. Thuộc tính phiên bản tệp phải được bao gồm trong bảng MsiAssemblyName mới của MSI. Wix không bao gồm thuộc tính này theo mặc định, vì vậy bạn cần phải thêm tham số sau đây để tập .wixproj của bạn:

<SetMsiAssemblyNameFileVersion>True</SetMsiAssemblyNameFileVersion> 

Xem thêm:

In-place updating using Wix

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