2012-06-12 27 views
12

Trong cài đặt Visual Studio Deployment Project kế thừa, thông qua một tham số dòng lệnh chỉ định giá trị cho TARGETDIR cho phép tôi ghi đè vị trí cài đặt mặc định (hầu hết các cài đặt của tôi diễn ra mà không tương tác với người dùng, vì vậy tự động hóa dòng lệnh được sử dụng nhiều) . Tuy nhiên, ấn tượng tôi nhận được là WiX (theo mặc định) sử dụng TARGETDIR cho một cái gì đó khác nhau. Trong khi tôi có thể (và sẽ) cập nhật các công cụ dòng lệnh của chúng tôi để thay đổi tên tham số, vẫn còn để lại tất cả các cài đặt hiện có của chúng tôi cần phải được chạm thủ công (một nỗ lực không tầm thường).Cách sử dụng TARGETDIR và INSTALLDIR trong WiX là gì?

Có cách nào để ghi đè vị trí cài đặt trong gói WiX bằng cách chỉ định TARGETDIR mà không vi phạm điều gì không?

+0

http://stackoverflow.com/questions/15921078/ wix-toolset-create-directory-in-root-đĩa-system-disk-hoặc-c-and-copy-files-i điều này làm việc cho tôi. Sử dụng "anotherlocation" – WtFudgE

Trả lời

18

Sau khi thực hiện nhiều thao tác hơn, có vẻ như kinh nghiệm trước đây của tôi là kết quả của hành vi cụ thể đối với VSDPROJ (và có thể InstallShield), WiX phù hợp với Trình cài đặt Windows.

Như tôi đã khám phá tại this link, TARGETDIR thực sự được cho là đại diện cho thư mục gốc của ổ đĩa có dung lượng trống lớn nhất hiện có (giả sử có nhiều hơn một không gian). Đó là lý do tại sao các dự án WiX có các thư mục lồng nhau trong đó cho Program Files, vv Visual Studio thực sự thêm một hành động tùy chỉnh ghi đè thuộc tính này vào đường dẫn cài đặt đầy đủ.

tôi đã có thể thực hiện những gì tôi muốn bằng cách thực hiện hai điều:

  1. Thay đổi tất cả các thành phần của tôi và các nhóm thành phần để cài đặt vào TARGETDIR thay vì INSTALLFOLDER (thư mục mặc định mà WiX đặt ở đó)
  2. Thêm hành động tùy chỉnh đặt giá trị của thuộc tính TARGETDIR vào đường dẫn cài đặt, giả sử một giá trị không được chuyển vào từ dòng lệnh.

Để làm điều đó, tôi đã thêm này theo những <Product> tag:

<CustomAction Id="SetTARGETDIR" Property="TARGETDIR" 
       Value="[ProgramFilesFolder][Manufacturer]\[ProductName]" 
       Execute="firstSequence" /> 

Và điều này trong <InstallExecuteSequence> tag:

<Custom Action="SetTARGETDIR" Before="CostFinalize">TARGETDIR=""</Custom> 
+0

Điều này giải quyết vấn đề của tôi xung quanh chủ đề này rất! Cảm ơn bạn rất nhiều vì đã chia sẽ nó. – joebalt

+0

Điều này không làm bất cứ điều gì cho tôi ... Nó vẫn cài đặt công cụ của tôi trong E. – WtFudgE

+1

@WtFudgE: Đặt cược tốt nhất của bạn sẽ là đăng một câu hỏi khác. –

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