2013-04-26 24 views
6

Tôi có một gói cài đặt bao gồm một tệp không nén.Làm thế nào để bao gồm một tập tin lỏng có thể sửa đổi trong quá trình ghi WiX?

<DirectoryRef Id="INSTALLLOCATION"> 
    <Component Id="LocationConfig"> 
    <File Id="LocationConfigFile" 
      Source="LooseFile.Config" 
      DiskId="2" 
      Vital="no" 
      Compressed="no" /> 
    </Component> 
</DirectoryRef> 

Mục đích của tệp này bị mất là có thể chỉnh sửa trước khi cài đặt. Điều này hoạt động như mong muốn.

Tôi có một chuỗi ghi rõ rằng tệp lỏng được bao gồm dưới dạng tệp lỏng cùng với bootstrapper. Cũng lưu ý việc sử dụng SuppressLooseFilePayloadGeneration để cho phép đặc tả thủ công của tệp dưới dạng tải trọng lỏng lẻo.

<Chain> 
    <MsiPackage SourceFile="MyInstaller.msi" 
       Visible="yes" 
       Vital="no" 
       SuppressLooseFilePayloadGeneration="yes"> 
    <Payload Compressed="no" SourceFile="LooseFile.Config" /> 
    </MsiPackage> 
</Chain> 

Các bỏng log trông như thế này:

[3860:38D8][2013-04-26T16:42:48]e000: Error 0x80091007: Hash mismatch for path: C:\ProgramData\Package Cache\.unverified\payAC32431CF002C09E2F0B537A32ACA259 
[3860:38D8][2013-04-26T16:42:48]e000: Error 0x80091007: Failed to verify hash of payload: payAC32431CF002C09E2F0B537A32ACA259 
[3860:38D8][2013-04-26T16:42:48]e310: Failed to verify payload: payAC32431CF002C09E2F0B537A32ACA259 at path: C:\ProgramData\Package Cache\.unverified\payAC32431CF002C09E2F0B537A32ACA259, error: 0x80091007. Deleting file. 
[3860:38D8][2013-04-26T16:42:48]e000: Error 0x80091007: Failed to cache payload: payAC32431CF002C09E2F0B537A32ACA259 
[33FC:3A54][2013-04-26T16:42:48]e314: Failed to cache payload: payAC32431CF002C09E2F0B537A32ACA259 from working path: C:\Users\Snixtor\AppData\Local\Temp\{c887e0cf-5038-4e15-95b1-8510d8c96b88}\payAC32431CF002C09E2F0B537A32ACA259, error: 0x80091007. 

OK, băm là không bởi vì các tập tin đã thay đổi. Nhưng ... Tôi muốn cho phép người dùng thay đổi tệp. Tôi có thể dễ dàng làm điều này với một gói thiết lập tiêu chuẩn, vì vậy những gì hoops tôi phải nhảy qua để có được nó để hành xử với một bootstrapper?

Tôi đã tìm thấy this discussion trong danh sách gửi thư của người dùng WiX. Robs phản ứng của "Nó chỉ nên làm việc" âm thanh đầy hứa hẹn, nhưng sau đó các cuộc thảo luận dường như di chuyển trên để đề nghị nó có thể là một lỗi? Nếu tác giả đã từng đưa ra một báo cáo lỗi, tôi không thể tìm thấy nó.

Một giải pháp thay thế mà tôi xem xét là loại trừ tệp hoàn toàn khỏi tải trọng bootstrap và sau đó sao chép nó sang đường dẫn bộ đệm MSI trong khi cài đặt để MSI có thể tìm thấy, mặc dù ghi sẽ không bao giờ cố gắng xác thực. Nhưng hai sự cố tôi thấy có:

  1. Tôi không thể tìm hiểu cách khám phá đường dẫn bộ nhớ cache từ bên trong bootstrapper của mình.
  2. Ngay cả khi tôi biết đường dẫn, tôi cần nâng cấp bootstrapper để sao chép tệp. Đó có thể không phải là một showstopper, nhưng tôi có một nghi ngờ lén lút nó có thể chứng minh khó khăn.

Trả lời

5

Điều này hiện không được hỗ trợ. Burn xác nhận tất cả mọi thứ trước khi đặt nó trong bộ nhớ cache vì lý do bảo mật. Những gì bạn có thể làm là đọc tệp bên ngoài trong một tùy chỉnh Bootstrapper Application và lưu trữ kết quả dưới dạng duy trì Variables. Điều này sẽ được nhiều công việc nhưng Burn chỉ sẽ không tin tưởng các tập tin mà không phù hợp với băm an ninh/chữ ký chèn vào lúc xây dựng.

+0

Cảm ơn Rob, thật tuyệt khi biết * sự thật * của tình huống thay vì chụp trong bóng tối. Tôi đã suy nghĩ làm việc với 'Biến' có thể là một thay thế. Tôi sẽ xem xét nó. May mắn thay tập tin cấu hình tôi đang làm việc với khá đơn giản. – Snixtor

+0

Tôi có cùng một vấn đề và tôi không chắc mình có hiểu câu trả lời hay không. Có một ví dụ cho điều này ở đâu không? Tôi về cơ bản cần cả bootstrapper (cho điều kiện tiên quyết), và các tập tin .msi + lỏng lẻo có thể được thay thế trước khi cài đặt. Cài đặt MSI bằng chính các tệp lỏng hoạt động hoàn hảo (miễn là bạn đã có các điều kiện tiên quyết). – lesscode

2

tôi làm việc xung quanh vấn đề này cùng bằng cách treo cổ ra khỏi sở hữu thư mục hiện rằng bộ bootstrapper bỏng và sử dụng nó với một yếu tố copyfile như vậy:

<Component Id="SettingsFile" Guid="..."> 
    <CopyFile Id="Copy" Delete="no" DestinationDirectory="INSTALLFOLDER" SourceName="LooseSettings.xml" SourceProperty="CURRENTDIRECTORY" /> 
    <RemoveFile Id="Remove" On="uninstall" Directory="INSTALLFOLDER" Name="LooseSettings.xml" /> 
    </Component> 

Có hoàn toàn có thể một số vấn đề với nó nhưng tôi m viết trình cài đặt cho thông số kỹ thuật của người khác và có vẻ như hoạt động

+0

Tôi đã có thể nhận được một cái gì đó tương tự như làm việc cho nhu cầu của tôi cũng có. Mẹo hay. – lesscode

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