2013-02-22 21 views
6

Tôi đang tạo một ứng dụng cài đặt WPF với giao diện người dùng tùy chỉnh. Tôi bắt đầu với hướng dẫn của Bryan P. Johnston: http://bryanpjohnston.com/2012/09/28/custom-wix-managed-bootstrapper-application/WiX: cách truy cập/thay đổi thư mục cài đặt trong bootstrapper được quản lý?

Một nơi nào đó trong quan điểm của tôi, tôi có một đơn giản TextBox mà liên kết với một tài sản InstallationPath trong MainViewModel tôi.

Bây giờ tôi muốn đường dẫn này được sử dụng khi người dùng nhấp vào "Cài đặt". Đối với điều này, tôi có một nút liên kết với InstallCommand của tôi. Phương pháp sau đây được gọi (lấy trực tiếp từ hướng dẫn):

private void InstallExecute() 
{ 
    Bootstrapper.Engine.Plan(LaunchAction.Install); 
} 

Làm cách nào để đặt gói vào thư mục tài sản của tôi InstallationPath?


Edit:

Tôi tìm thấy một câu hỏi tương tự ở đây trên Stackoverflow:

Specify the INSTALLLOCATION of packages in WiX inside the Burn managed bootstrapper

Câu trả lời có từ Bob Arnson

Sử dụng một con MsiProperty cho mỗi MsiPackage để chỉ định INSTALLLOCATION = [BurnVariable]. Sau đó sử dụng Engine.StringVariables để thiết lập BurnVariable.

Bây giờ, tôi nghĩ rằng tôi có thể truy cập vào StringVariables trong InstallExecute của tôi như thế này

private void InstallExecute() 
{ 
    Bootstrapper.Engine.StringVariables["BurnVariable"] = InstallationPath; 
    Bootstrapper.Engine.Plan(LaunchAction.Install); 
} 

Nhưng nơi để xác định biến này? Tôi đoán đâu đó trong Product.wxs?

+0

Hey Michael, tôi đi theo cùng một hướng dẫn này và tôi đang phải đối mặt với một vấn đề mà trong nâng cấp lớn, các exe trước là không nhận được gỡ bỏ như một mới được cài đặt cạnh nhau. Tôi đã tăng cả phiên bản EXE và các phiên bản MSIs đi kèm. Tôi thấy một số người khác bình luận cùng một vấn đề bên dưới hướng dẫn. Bạn có gặp sự cố này không? Nếu vậy làm thế nào bạn vượt qua nó? :(Cần một số người giúp đỡ – mayooran

Trả lời

8

Có chỉ cần tạo một biến trong bỏng bootstrapper của bạn:

<Variable Name="BurnVariable" 
      bal:Overridable="yes" /> 

sau đó bạn có thể chuyển thông tin này như một tham số để khởi động kẹt gói msi của bạn:

<MsiPackage SourceFile="$(var.YourMsiProject.Installer.TargetPath)" Compressed="no"> 
    <MsiProperty Name="INSTALLLOCATION" Value="[BurnVariable]" />   
</MsiPackage> 
+0

Cảm ơn! Đó là chính xác những gì tôi đang tìm kiếm. :-) –

1

Một thiếu tài sản "Loại" trên yếu tố Biến bó. caverman_dick là đúng nhưng điều này không hoạt động đúng khi không thể ghi đè. Bạn cũng có thể thử điều này, đặt Type = "string".

Wix Variable Element

<Wix>...<Bundle>... 
    <Variable Name="MyApplicationMsiInstallFolder" Value="[WindowsVolume]MyApplication" 
      bal:Overridable="yes" Type="string"/> 
    <Chain> 
     <?if $(var.DbVersion) = false?> 
     <PackageGroupRef Id="AccessDatabaseGroup"/> 
     <RollbackBoundary /> 
     <?endif?> 
     <MsiPackage Id="MyApplicationMsiPackage" SourceFile="$(var.MyApplicationSetup.TargetPath)" DisplayInternalUI="no" 
           Vital="yes" > 
      <MsiProperty Name="APPLICATIONFOLDER" Value="[MyApplicationMsiInstallFolder]"/> 
     </MsiPackage> 
    </Chain> 
</Bundle></Wix> 
Các vấn đề liên quan