2012-05-08 49 views
18

Tôi đang sử dụng VS2010 và WiX 3.6 để tạo gói MSI và gộp chúng vào thiết lập Bootstrapper. Đây là mã Boostrapper của tôi.Truyền tham số từ bootstrapper tới gói gói msi

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Bundle Name="" Version="" Manufacturer="" UpgradeCode=""> 
     <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" /> 

     <Chain> 
       <MsiPackage SourceFile="Package1.msi"> 
       <MsiProperty Name="PARAM1" Value="[PARAM1]" /> 
       <MsiProperty Name="PARAM2" Value="[PARAM2]" /> 
       </MsiPackage> 
       <MsiPackage SourceFile="Package2.msi"> 
       <MsiProperty Name="PARAM1" Value="[PARAM1]" /> 
       <MsiProperty Name="PARAM2" Value="[PARAM2]" /> 
       </MsiPackage> 
     </Chain> 
    </Bundle> 
</Wix> 

Gói MSI phải có thông số được chỉ định để chạy. Thông thường, tôi sẽ gọi "Packag21.msi PARAM1=1 PARAM2=2". Sau khi tôi xây dựng dự án, tôi cố gắng chuyển các tham số tới Bootstrapper.exe theo cách tương tự Bootstrapper.exe PARAM1=1 PARAM2=2, nhưng dường như không truyền chúng cho MSI. Cài đặt bị treo với điều kiện tham số bị thiếu.

Có cách nào để chuyển các tham số từ exe sang msi không?

Trả lời

5

Đó hiện không có sẵn trong bootstrapper tiêu chuẩn: WixStdBa doesn't make the commandline properties available - ID: 3489809

Bạn có thể thực hiện chức năng như vậy nếu bạn tạo ứng dụng bootstrapper của riêng bạn.

EDIT: Mặc dù bạn không thể vượt qua các thông số để bootstrapper của bạn thông qua dòng lệnh, bạn vẫn có thể thu thập thông tin trong bootstrapper cách khác nhau của bạn:

ví dụ: Thiết lập một biến

<Variable Name="PARAM1" Value="SomeValue" Persisted="yes" Type="string" /> 

ví dụ: Tìm kiếm đăng ký

<util:RegistrySearch Root="HKLM" Key="Software\SomeProduct" Value="SomeKey" Variable="PARAM1" Result="value"/> 
+0

Cảm ơn bạn. Việc xác nhận rằng điều này không thể được thực hiện là hữu ích. Tôi đã đăng cùng một câu hỏi trên danh sách gửi thư của người dùng wix và nhận được phản hồi tương tự. –

32

Điều này hiện đã được triển khai và có sẵn khi phát hành RC Wix 3.6 vào ngày 21 tháng 5 năm

Đây là ý tưởng chung về cách hoạt động:

<Wix> 
<Bundle> 
    <Variable Name="CommandLineArg" bal:Overridable="yes"/> 
    <Chain> 
     <MsiPackage> 
     <MsiProperty Name="CommandLineArg" Value="[CommandLineArg]"/> 
     </MsiPackage> 
    </Chain> 
</Bundle> 
</Wix> 

Bạn phải thực hiện một biến bó đó là Overridable tại dòng lệnh và sau đó vượt qua biến đó để msi của bạn.

+0

Điều này không hoạt động. – Isaiah4110

+0

Bây giờ nó hoạt động! Cảm ơn bạn [user1513304] (http://stackoverflow.com/users/1513304/user1513304). – Dimiano

+0

Không gian tên "bal" được giải quyết từ đâu? VS chèn thuộc tính xmlns: bal = "" khi tôi gõ bal: Overridable = "yes". – grwww

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